【问题标题】:Python Dependency Management on EMREMR 上的 Python 依赖管理
【发布时间】:2013-07-07 16:00:55
【问题描述】:

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

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

pip install -r requirements.txt

就像我在本地一样?

【问题讨论】:

    标签: python virtualenv pip elastic-map-reduce mrjob


    【解决方案1】:

    所以,如果您使用的是 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 脚本中使用。

    【讨论】:

      【解决方案2】:

      实现此目的的一种方法是使用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

      【讨论】:

        猜你喜欢
        • 2015-04-18
        • 2012-06-30
        • 1970-01-01
        • 2020-09-05
        • 2022-08-09
        • 2021-11-18
        • 2021-09-09
        • 2011-03-13
        • 2013-06-15
        相关资源
        最近更新 更多