AWS EMR Spark 未使用自定义 Jar 加载 MainClass

Posted

技术标签:

【中文标题】AWS EMR Spark 未使用自定义 Jar 加载 MainClass【英文标题】:AWS EMR Spark is not loading MainClass using custom Jar 【发布时间】:2018-03-17 01:31:06 【问题描述】:

我正在尝试使用单个自定义步骤创建一个 emr spark 集群。 集群创建成功,但是步骤定义不正确。

更新

我尝试通过 Web 控制台启动同一个集群并获得相同的结果。当我在保存步骤时指定 Jar 位置时,JAR 位置设置为command-runner.jar,并且提供的 JAR 路径被添加到参数列表中。

CLI 命令:

aws emr create-cluster --name 'emr-test' \
--applications Name=Spark \
--release-label emr-5.11.1 \
--auto-terminate \
--instance-type m3.xlarge \
--instance-count 1 \
--ec2-attributes SubnetId=subnet-000000 \
--steps '[
    "Type": "SPARK",
    "Name": "spark-program",
    "Args": ["--class","--init-keyspaces"],
    "Jar": "s3://mybucket/snapshots/0.1.0-SNAPSHOT/2.11/my-spark-assembly-0.1.0-SNAPSHOT.jar",
    "ActionOnFailure": "TERMINATE_CLUSTER",
    "MainClass":"com.myspark.data.consumers.jobs.MyJob"
]' \
--use-default-roles \
--log-uri 's3://mybucket/logs' \
--tags Name='spark-program' Environment='test'

结果:

当我在控制台的“步骤”选项卡下查看时。

JAR location: command-runner.jar
Main class: None
Arguments: spark-submit --class --init-keyspaces
Action on failure: Terminate cluster

预期:

JAR location: s3://mybucket/snapshots/0.1.0-SNAPSHOT/2.11/my-spark-assembly-0.1.0-SNAPSHOT.jar
Main class: com.myspark.data.customer.jobs.MyJob
Arguments: spark-submit --class --init-keyspaces
Action on failure: Terminate cluster

我已确认 S3 存储桶和 JAR 位于正确的位置。 使用标准语法时,我也得到了相同的结果。

【问题讨论】:

【参考方案1】:

发现我的预期不正确。通过 CLI 创建新作业并仅包含 JAR 参数时,将创建自定义 JAR 项目。如果 spark args(即--conf)也被传递到 CLI,那么会创建一个 Spark 作业。

Web 控制台中的这两种作业类型看起来不同。例如,对于 Spark 作业,JAR location 设置为 command-runner.jar,但对于自定义 JAR,它设置为 s3 存储桶的路径。

AWS 自定义 Spark 步骤文档 https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-submit-step.html

【讨论】:

以上是关于AWS EMR Spark 未使用自定义 Jar 加载 MainClass的主要内容,如果未能解决你的问题,请参考以下文章

为啥 AWS EMR 上的 Spark 不从应用程序 fat jar 加载类?

如何告诉 spark 和 zeppelin 在 AWS EMR 中使用本地 maven .m2 目录?

我的 spark 代码没有使用 Yarn aws EMR 中可用的所有执行器

通过AWS EMR降低集群计算成本

AWS EMR 上的 Spark:使用更多执行器

Spark AWS emr 检查点位置