2013-07-09 19 views
6

invio il codice all'EMR di Amazon tramite i moduli mrjob/boto. Ho alcune dipendenze Python esterne (ad esempio numpy, boto, ecc.) e attualmente devo scaricare l'origine dei pacchetti Python e inviarli come tarball nel campo "python_archives" del file mrjob.config.Gestione dipendenze Python su EMR

questo rende la gestione delle dipendenze più cauta di quanto vorrei e mi chiedo se posso in qualche modo utilizzare lo stesso file requirements.txt che utilizzo per il mio setup virtualenv per eseguire il bootstrap dell'istanza emr con le mie dipendenze. è possibile impostare virtualenv di EMR sulle istanze e fare qualcosa di simile:

pip install -r requirements.txt 

come farei a livello locale?

risposta

3

Un modo per ottenere questo risultato è un bootstrap action. Puoi usarli per eseguire gli script di shell.

Se si dispone di un file di installazione python che fa qualcosa di simile:

requirements = open("requirements.txt", "r") 
shell_script = open("pip.sh", "w+") 
shell_script.write("sudo apt-get install python-pip\n") 
for line in requirements: 
    shell_script.write("sudo pip install -I " + line) 

Poi si può solo eseguire questo come l'azione di bootstrap senza bisogno di caricare il tuo requirements.txt

0

Quindi, se si' usando mrjob, ho avuto un certo successo semplicemente inserendo le chiamate pip direttamente nel mio file .mrjob.conf come azione bootstrap. Non è elegante come usare un file requirements.txt (caricherà gli stessi moduli per tutti i tuoi lavori). Ad esempio, il mio file di configurazione si presenta come:

runners: 
    emr: 
    aws_access_key_id: xx 
    aws_secret_access_key: xx 
    ec2_key_pair: xx 
    ec2_key_pair_file: xx 
    ssh_tunnel_to_job_tracker: true 
    bootstrap_cmds: 
     - sudo apt-get install -y python-pip 
     - sudo pip install pgnparser 
     - sudo pip install boto 

e che caricherà i moduli pgnparser e boto per me di utilizzare nei miei mrjob script.