【问题标题】:AWS EMR Spark Step args bugAWS EMR Spark Step 参数错误
【发布时间】:2017-06-09 07:43:46
【问题描述】:

我正在通过 AWSCLI 向 EMR 提交 Spark 作业,EMR 步骤和 spark 配置作为单独的 json 文件提供。由于某种原因,我的主类的名称作为不必要的命令行参数传递给我的 Spark jar,导致作业失败。

AWSCLI 命令:

aws emr create-cluster \
    --name "Spark-Cluster" \
    --release-label emr-5.5.0 \
    --instance-groups \
    InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge \
    InstanceGroupType=CORE,InstanceCount=20,InstanceType=m3.xlarge \
    --applications Name=Spark \
    --use-default-roles \
    --configurations file://conf.json \
    --steps file://steps.json \
    --log-uri s3://blah/logs \

描述我的 EMR 步骤的 json 文件:

[
  {
    "Name": "RunEMRJob",
    "Jar": "s3://blah/blah.jar",
    "ActionOnFailure": "TERMINATE_CLUSTER",
    "Type": "CUSTOM_JAR",
    "MainClass": "blah.blah.MainClass",
    "Args": [
      "--arg1",
      "these",
      "--arg2",
      "get",
      "--arg3",
      "passed",
      "--arg4",
      "to",
      "--arg5",
      "spark",
      "--arg6",
      "main",
      "--arg7",
      "class"
    ]
  }
]

我的主类中的参数解析器抛出错误(并打印提供的参数):

Exception in thread "main" java.lang.IllegalArgumentException: One or more parameters are invalid or missing:

blah.blah.MainClass --arg1 these --arg2 get --arg3 passed --arg4 to --arg5 spark --arg6 main --arg7 class

所以由于某种原因,我在 steps.json 中定义的主类泄漏到我单独提供的命令行参数中。

怎么了?

【问题讨论】:

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


    【解决方案1】:

    我误解了 EMR 步骤的工作原理。有两种解决方法:

    我可以使用 Type = "CUSTOM_JAR" 和 Jar = "command-runner.jar" 并向 Args 添加一个正常的 spark-submit 调用。

    使用 Type = "Spark" 只需添加 "spark-submit" 调用作为第一个参数,仍然需要提供 master、jar 位置、主类等...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2018-07-02
      • 1970-01-01
      相关资源
      最近更新 更多