6

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

这使得依赖管理比我想要的更混乱,我想知道我是否可以以某种方式使用我用于我的 virtualenv 设置的相同 requirements.txt 文件来引导带有我的依赖项的 emr 实例。是否可以在 EMR 实例上设置 virtualenv 并执行以下操作:

pip install -r requirements.txt

就像我在当地一样?

4

2 回答 2

3

实现此目的的一种方法是使用引导操作。您可以使用它们来运行 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

于 2013-07-15T22:45:51.600 回答
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脚本中使用。

于 2013-12-27T03:35:30.783 回答