Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Amazon EMR上引导Python模块的安装?_Python_Amazon Web Services_Apache Spark_Emr - Fatal编程技术网

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

如何在Amazon EMR上引导Python模块的安装?,python,amazon-web-services,apache-spark,emr,Python,Amazon Web Services,Apache Spark,Emr,我想做一些非常基本的事情,只需通过EMR控制台启动一个Spark集群并运行一个依赖于Python包的Spark脚本(例如)。最简单的方法是什么?简而言之,根据平台的不同,有两种方法可以使用pip安装软件包。首先,安装您需要的任何东西,然后可以运行Spark步骤。最简单的方法是使用emr-4.0.0和“command runner.jar”: from boto.emr.step import JarStep >>> pip_step=JarStep(name="Command

我想做一些非常基本的事情,只需通过EMR控制台启动一个Spark集群并运行一个依赖于Python包的Spark脚本(例如)。最简单的方法是什么?

简而言之,根据平台的不同,有两种方法可以使用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])
在2.x和3.x上,使用script-runner.jar的方式类似,只是必须为其指定完整的URI

编辑:
抱歉,我没有看到您希望通过控制台执行此操作。您也可以在控制台中添加相同的步骤。第一步是使用与上面相同的参数创建客户JAR。第二步是火花步骤。希望这有帮助

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

下面是我在生产中使用的一个示例:

s3://mybucket/bootstrap/install_python_modules.sh


根据您使用的是Python 2(EMR中的默认值)还是Python 3,pip install命令应该有所不同。 按照中的建议,您应该创建一个shell脚本,将其上载到S3中的一个bucket中,并将其用作脚本

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

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


这篇文章让我走上了正确的道路,但最终我找到了一个不同的解决方案

boostrap.sh

#/bin/bash
sudo python3-m pip安装\
博托考\
博托\
ujson\
瓦西奥\
美丽之路4\
lxml
create\u emr\u cluster.sh

#/bin/bash
pem_file=“~/.ssh/.pem”
引导\u path=“s3://”
子网\u id=“子网-
logs\u path=“s3:///elasticmapreduce/”
aws s3 cp./bootstrap.sh$bootstrap\u路径
ID=$(aws emr创建群集\
--名称火花数据处理\
--使用默认角色\
--发布标签emr-5.30.1\
--实例计数2\
--应用程序名称=火花名称=蜂巢名称=神经节名称=齐柏林飞艇\
--ec2属性KeyName=,SubnetId=$subnet\u id\
--实例类型m4.L\
--引导操作路径=${bootstrap\u Path}bootstrap.sh\
--查询集群\
--输出文本\
--日志uri${logs\u path})

要获得Python 3的帮助,请创建bash脚本:

#!/bin/bash -xe
sudo pip3 install your_package

将其复制到S3,并从控制台设置引导操作以指向脚本。

这将在EMR集群中的一个节点上安装软件包。如何确保在所有节点上安装包?这将在所有节点上安装包这不适用于Python3。我正在安装熊猫。有什么新建议吗?@EvanZamir请检查我的答案,您需要在脚本中使用pip-3.4,而这并不遵循使用requirements.txt来包含需求的典型惯例。为了允许本地和远程执行,您应该使用
aws s3 cp
将requirements.txt复制到本地文件夹,然后在从s3复制需求文件后,使用
pip install-y requirements.txt
进行安装。
conn
从何而来如果您使用的是使用python 3.4的特定EMR,则此功能正常。这需要针对每个EMR版本分别进行检查。例如,
emr-5.21.0
使用
python-3.6
,因此您需要将pip调整为
pip-3.6
,因此这不是一个一刀切的解决方案。另一个注意事项是,如果您想在使用两个版本的pip进行安装时删除整个stderr日志,以下内容将有助于引导操作shell脚本:
sudo sed-i-e的/$OLD_PIP_VERSION/$PIP_VERSION/g'/usr/bin/PIP-3.6
,基于指定的版本安装sudo pip3。规避版本标记问题?
/bin/bash-xe;sudo pip-3.6安装boto3
适合我
#!/bin/bash -xe
sudo pip install your_package
#!/bin/bash -xe
sudo pip-3.4 install your_package
#!/bin/bash -xe
sudo pip3 install your_package