我通过mrjob / boto模块向亚马逊的EMR发送代码。我有一些外部python依赖项(即numpy,boto等),目前必须下载python包的源代码,并将它们作为tarball发送到mrjob.config文件的“python_archives”字段中。
这使得依赖管理比我想要的更加混乱,并且想知道我是否可以以某种方式使用相同的requirements.txt文件,我用于我的virtualenv设置以使用我的依赖项引导emr实例。是否可以在EMR实例上设置virtualenv,并执行以下操作:
pip install -r requirements.txt
我会在当地吗?
答案 0 :(得分: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
答案 1 :(得分: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
这将加载pgnparser
和boto
模块供我在我的mrjob
脚本中使用。