2013-07-09 20 views
6

私はmrjob/botoモジュールを介してamazonのEMRにコードを送信しています。私はいくつかの外部のpythonの依存関係(すなわちnumpy、botoなど)を持っていますが、現在はpythonパッケージのソースをダウンロードし、mrjob.configファイルの "python_archives"フィールドにtarballとしてそれらを送信する必要があります。EMRのPython依存関係管理

これは、私が望むよりも扱いにくいものになります。私が何らかの理由で同じrequirements.txtファイルを使用することができるのだろうかと疑問に思っています。私のvirtualenvセットアップで自分の依存関係でemrインスタンスをブートストラップします。 EMRインスタンスにvirtualenvを設定して、次のようなことを行うことが可能です:

pip install -r requirements.txt 

私はローカルですか?

答えて

3

これを達成する1つの方法は、bootstrap actionを使用することです。これらを使用してシェルスクリプトを実行することができます。

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) 

あなたなら、あなたはただ、だからあなたのrequirements.txt

0

をアップロードすることなく、ブートストラップアクションとして、これを実行することができます」:あなたのような何かをするセットアップのpythonファイルがある場合は

mrjobを使って、私はピップコールをブートストラップアクションとして.mrjob.confファイルに直接入れるだけでいくつかの成功を収めました。 requirements.txtファイルを使用する場合と同じくらいエレガントではありません(すべてのジョブで同じモジュールをロードします)。例えば、私のconfファイルには、次のようになります。

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 

、それは私が私のmrjobスクリプトで使用するためのpgnparserbotoモジュールをロードします。