2015-07-20 87 views

回答

22

最直接的方法是创建一个包含安装命令的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 
+0

这将安装EMR群集中某个节点上的软件包。我如何确保软件包安装在所有节点上? – Aliza

+1

这会在所有节点上安装软件包 – noli

4

总之,根据平台的不同,有两种方法可以使用pip安装软件包。首先,你安装任何你需要的,然后你可以运行你的Spark步骤。最简单的方法是使用EMR-4.0.0和“命令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]) 

在2.x和3.x,您可以使用脚本runner.jar以类似的方式,只是你有指定scriptrunner的完整URI。

编辑: 对不起,我没有看到你想通过控制台做到这一点。您也可以在控制台中添加相同的步骤。第一步是与上述相同的客户JAR。第二步是火花一步。希望这可以帮助!

+0

哪里'conn'来自 –