我正在尝试使用单个自定义步骤创建一个 emr 火花集群。群集已成功创建,但未正确定义步骤。
更新
我尝试通过 Web 控制台对同一集群进行午餐,并得到相同的结果。当我在保存步骤时指定 Jar 位置时,JAR 位置设置为 command-runner.jar
,并且提供的 JAR 路径将添加到参数列表中。
命令行命令:
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 位于正确的位置。使用标准语法时,我也得到了相同的结果。
发现我的期望不正确。通过 CLI 创建新作业并仅包含 JAR 参数时,将创建自定义 JAR 项目。如果火花参数(即 --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