【问题标题】:amazon emr spark submission from S3 not working从 S3 提交的亚马逊 emr spark 无法正常工作
【发布时间】:2016-11-06 13:32:46
【问题描述】:

我有一个集群正在运行。我正在尝试添加一个步骤来运行我的代码。代码本身在单个实例上运行良好。唯一的问题是我无法让它在 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 文件并指定如下时,IT 会走得更远:

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 不起作用。

【问题讨论】:

  • 您的 EMR 集群是否具有访问 S3 的适当 IAM 权限?
  • 是的,因为我可以从 S3 执行引导操作。那部分成功了。顺便说一句 - 当我使用 GUI 时,它起作用了。现在真的很沮丧。 :)
  • 你有没有想过这个问题?我们遇到了同样的问题。如果我使用本地 FS 的 jar,它可以工作。我通过 S3 传入一个,但失败了。
  • 我做了...我希望我有我使用的确切命令。不幸的是,我现在无法访问它们。我相信我是这样提交的:Args=["spark-submit",s3://blah-blah/blah.py,......].

标签: amazon-web-services apache-spark amazon-s3 pyspark amazon-emr


【解决方案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>/]

【讨论】:

    【解决方案2】:

    我搜索了几天,终于发现this thread是哪个状态

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      相关资源
      最近更新 更多