1

我有一个集群启动并运行。我想添加一个步骤来运行我的代码。代码本身在单个实例上正常工作。唯一的问题是,我无法让它解决S3问题。亚马逊emr从S3提交不工作

aws emr add-steps --cluster-id j-XXXXX --steps Type=spark,Name=SomeSparkApp,Args=[--deploy-mode,cluster,--executor-memory,0.5g,s3://<mybucketname>/mypythonfile.py] 

这正是我应该做的示例。我究竟做错了什么?

错误,我得到:

Exception in thread "main" java.lang.IllegalArgumentException: Unknown/unsupported param List(--executor-memory, 0.5g, --executor-cores, 2, --primary-py-file, s3://<mybucketname>/mypythonfile.py, --class, org.apache.spark.deploy.PythonRunner) 

Usage: org.apache.spark.deploy.yarn.Client [options] 
Options: 
    --jar JAR_PATH   Path to your application's JAR file (required in yarn-cluster 
          mode) 
    . 
    . 
    . 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
Command exiting with ret '1' 

当我指定为这个代替:

aws emr add-steps --cluster-id j-XXXXX --steps Type=spark,Name= SomeSparkApp,Args=[--executor-memory,0.5g,s3://<mybucketname>/mypythonfile.py] 

我得到这个错误,而不是:

Error: Only local python files are supported: Parsed arguments: 
    master     yarn-client 
    deployMode    client 
    executorMemory   0.5g 
    executorCores   2 

编辑:沿时进一步得到我在SSH到集群后手动创建python文件,并指定如下:

aws emr add-steps --cluster-id 'j-XXXXX' --steps Type=spark,Name= SomeSparkApp,Args=[--executor-memory,1g,/home/hadoop/mypythonfile.py] 

但是,没有做好这项工作。

任何帮助表示赞赏。这非常令人沮丧,因为AWS自己的博客https://blogs.aws.amazon.com/bigdata/post/Tx578UTQUV7LRP/Submitting-User-Applications-with-spark-submit上有记录的方法无效。

+0

您的EMR群集是否具有适当的IAM权限来访问'S3'? – Kristian

+1

是的,因为我可以在S3中完成引导操作。该部分成功。顺便说一句 - 当我使用GUI时,它工作。现在真的很沮丧。 :) – Gopala

+0

你有没有想过这个DId?我们遇到了同样的问题。如果我使用本地FS的罐子,它可以工作。我通过S3传入并且失败。 – luckytaxi

回答

1

我会问,以防万一,您使用了正确的存储桶和集群ID-s?

但无论如何,我有类似的问题,就像我从S3读取时不能使用--deploy-mode,cluster。 当我在参数中使用--deploy-mode,client,--master,local[4]时,我认为它工作。但我想我还是需要一些不同的东西,记不太清楚了,但我使出这样一个解决方案:

首先,我用其中一个shell脚本运行的命令的引导作用:

aws s3 cp s3://<mybucket>/wordcount.py wordcount.py 

然后我添加一个步骤,群集创建通过我的Go应用程序的SDK,但我可以记得这个信息,给你这样的CLI命令:

aws emr add-steps --cluster-id j-XXXXX --steps Type=CUSTOM_JAR,Name="Spark Program",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=["spark-submit",--master,local[4],/home/hadoop/wordcount.py,s3://<mybucket>/<inputfile.txt> s3://<mybucket>/<outputFolder>/] 
0

我搜索了几天,终于发现this thread其中规定

PySpark目前只支持本地 文件。但这并不意味着它只能在本地模式下运行;你仍然可以在任何集群管理器上运行PySpark(尽管只能在客户端模式下运行)。所有 这意味着您的python文件必须位于本地文件系统上。 直到这被支持,直接的解决方法然后是 将文件复制到本地计算机。