如何在Amazon EMR上引导Python模块的安装?

Eva*_*mir 33 python amazon-web-services emr apache-spark

我想做一些非常基本的事情,只需通过EMR控制台启动一个Spark集群,然后运行依赖于Python包的Spark脚本(例如,Arrow).这样做最直接的方法是什么?

nol*_*oli 41

最直接的方法是创建一个包含安装命令的bash脚本,将其复制到S3,并从控制台设置引导操作以指向脚本.

这是我在制作中使用的一个例子:

S3://mybucket/bootstrap/install_python_modules.sh

#!/bin/bash -xe

# Non-standard and non-Amazon Machine Image Python modules:
sudo pip install -U \
  awscli            \
  boto              \
  ciso8601          \
  ujson             \
  workalendar

sudo yum install -y python-psycopg2
Run Code Online (Sandbox Code Playgroud)

  • 这将在所有节点上安装软件包 (3认同)
  • 这不适用于 Python3。我正在尝试安装 Pandas。有什么新建议吗? (2认同)
  • 这不遵循使用requirements.txt包含需求的典型约定。为了允许本地和远程执行,您应该使用“ aws s3 cp”将requirements.txt复制到本地文件夹,然后在从s3复制了需求文件之后使用“ pip install -y requirements.txt”进行安装。 (2认同)

Jon*_*aws 9

根据您使用的是 Python 2(EMR 中的默认设置)还是 Python 3,pip install 命令应该有所不同。按照noli 的回答中的建议,您应该创建一个 shell 脚本,将其上传到 S3 中的存储桶,并将其用作Bootstrap 操作

对于 Python 2(在 Jupyter 中:用作 pyspark 内核的默认值):

#!/bin/bash -xe
sudo pip install your_package
Run Code Online (Sandbox Code Playgroud)

对于 Python 3(在 Jupyter 中:用作 Python 3 和pyspark3内核的默认值):

#!/bin/bash -xe
sudo pip-3.4 install your_package
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是使用 python 3.4 的特定 EMR,这可以正常工作。这需要针对每个 EMR 版本单独检查。例如,`emr-5.21.0` 使用`python-3.6`,因此您需要将 pip 调整为 `pip-3.6`,因此这不是一刀切的解决方案。 (5认同)
  • `sudo pip3 install..` 会规避版本标记问题吗? (2认同)

Cra*_*g F 5

简而言之,根据平台的不同,有两种方法可以通过pip安装软件包。首先,安装所需的任何东西,然后可以运行Spark步骤。最简单的方法是使用emr-4.0.0和'command-runner.jar':

from boto.emr.step import JarStep
>>> pip_step=JarStep(name="Command Runner",
...             jar="command-runner.jar",
...             action_on_failure="CONTINUE",
...             step_args=['sudo','pip','install','arrow']
... )
>>> spark_step=JarStep(name="Spark with Command Runner",
...                    jar="command-runner.jar",
...                    step_args=["spark-submit","/usr/lib/spark/examples/src/main/python/pi.py"]
...                    action_on_failure="CONTINUE"
)
>>> step_list=conn.add_jobflow_steps(emr.jobflowid, [pip_step,spark_step])
Run Code Online (Sandbox Code Playgroud)

在2.x和3.x上,除了必须为scriptrunner指定完整的URI之外,您可以类似的方式使用script- runner.jar

编辑:对不起,我没有看到您要通过控制台执行此操作。您也可以在控制台中添加相同的步骤。第一步将是具有与上面相同参数的Customer JAR。第二步是火花步骤。希望这可以帮助!

  • `conn` 是从哪里来的 (2认同)