2013-07-09 10 views
6

Ich sende Code zu Amazon EMR über die Mrjob/Boto-Module. Ich habe einige externe Python-Abhängigkeiten (zB. numpy, boto, etc) und muss jetzt die Quelle der Python-Pakete herunterladen und sie als Tarball im Feld "python_archives" der mrjob.config-Datei senden.Python Dependency Management auf EMR

Dies macht Abhängigkeitsverwaltung unordentlicher als ich möchte, und frage mich, ob ich irgendwie die gleiche requirements.txt-Datei verwenden kann, die ich für mein virtualenv-Setup verwende, um die emr-Instanz mit meinen Abhängigkeiten zu starten. ist es möglich, virtualenv auf EMR-Instanzen einzurichten und so etwas zu tun:

pip install -r requirements.txt 

wie ich lokal wäre?

Antwort

3

Eine Möglichkeit, dies zu erreichen, ist die Verwendung eines bootstrap action. Sie können diese verwenden, um Shell-Skripts auszuführen.

Wenn ein Setup-Python-Datei, die etwas tut, wie:

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) 

Dann können Sie einfach diese als Boot Aktion ausführen, ohne dass Ihr requirements.txt

0

Also, wenn Sie hochladen‘ Wenn ich mrjob benutze, hatte ich Erfolg, indem ich die pip-Aufrufe direkt in meine .mrjob.conf-Datei als Bootstrap-Aktion gesetzt habe. Es ist nicht so elegant wie die Verwendung einer requirements.txt-Datei (es werden die gleichen Module für alle Ihre Jobs geladen). Zum Beispiel sieht meine conf-Datei wie:

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 

und das wird die pgnparser und boto Module lädt für mich in meinem mrjob Skripte zu verwenden.