pyspark AWS EMR CLI添加多个文件的步骤

pgky5nke  于 2023-01-04  发布在  Spark
关注(0)|答案(1)|浏览(147)

当我从本地shell脚本提交单个python(pyspark)文件时,我有一个运行良好的EMR环境(myProgram.py已经复制到S3...):

aws emr add-steps \
  --cluster-id $CID \
  --steps Type=Spark,\
Name="chessAnalytics",\
ActionOnFailure=CONTINUE,\
Args=[s3://$SRC_BUCKET/myProgram.py,\
--gameset1,\'$GAMESET1_URI\',\
--gameset2,\'$GAMESET2_URI\',\
--output_uri,s3://$OUT_BUCKET/V4_t]

我希望把myProgram.py中的一些实用程序分解成一个对等文件utils.py,所有的文档都回到spark-submit--py-files选项,并使用一个zip文件。我使用的是aws emr add-steps,我尝试将--py-files添加到add-steps发布版本中:

aws emr add-steps \
  --cluster-id $CID \
  --steps Type=Spark,\
Name="chessAnalytics",\
ActionOnFailure=CONTINUE,\
Args=[--py-files,s3://$SRC_BUCKET/myZipFile.zip,\
--gameset1,\'$GAMESET1_URI\',\
--gameset2,\'$GAMESET2_URI\',\
--output_uri,s3://$OUT_BUCKET/V4_t]

但此操作失败,错误为Error: Unrecognized option: --gameset1
使用本地CLI(aws emr add-step)在AWS EMR上捆绑pyspark exec的多个python文件的适当方法是什么?

pobjuy32

pobjuy321#

要在一个步骤中传递多个文件,需要使用file://将步骤作为json文件传递。
AWS CLI速记语法使用逗号作为分隔符来分隔一系列参数。因此,当我们尝试传入如下参数时:
"files","s3://betaestimationtest/mapper.py,s3://betaestimationtest/reducer.py",则速记语法分析器将把mapper.py和reducer.py文件视为两个参数。
解决方法是使用json格式。请参见下面的示例。

aws emr create-cluster --steps file://./mysteps.json --ami-version 3.1.0 --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge --auto-terminate --log-uri s3://betaestimationtest/logs

json看起来像这样:

[
    {
    "Name": "Intra country development",
    "Type": "STREAMING",
    "ActionOnFailure": "CONTINUE",
    "Args": [
        "-files",
        "s3://betaestimationtest/mapper.py,s3://betaestimationtest/reducer.py",
        "-mapper",
        "mapper.py",
        "-reducer",
        "reducer.py",
        "-input",
        " s3://betaestimationtest/output_0_inte",
        "-output",
        " s3://betaestimationtest/output_1_intra"
    ]}
]

您还可以在此处找到示例:https://github.com/aws/aws-cli/blob/develop/awscli/examples/emr/create-cluster-examples.rst

相关问题