2013-07-09 257 views
6

我通过mrjob/boto模块将代码发送到亚马逊的EMR。我有一些外部python依赖项(即numpy,boto等),目前必须下载python包的源代码,并将它们作为tar包发送到mrjob.config文件的“python_archives”字段中。EMR上的Python依赖关系管理

这使得依赖管理比我想要的更混乱,并且想知道我是否可以以某种方式使用与我的virtualenv安装程序相同的requirements.txt文件来引导emr实例和我的依赖项。是否有可能建立在EMR实例的virtualenv的和做的是这样的:

pip install -r requirements.txt 

,我会在本地?

回答

3

完成此操作的一种方法是使用bootstrap action。您可以使用这些来运行shell脚本。

如果你有安装Python文件,做一样的东西:

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

所以,如果你”重新使用mrjob,通过将pip调用直接放入我的.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 

,并且将加载pgnparserboto模块,对我来说,在我的mrjob脚本中使用。