代码之家  ›  专栏  ›  技术社区  ›  Charles Green

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

  •  1
  • Charles Green  · 技术社区  · 8 年前

    我正在尝试通过一个自定义步骤创建一个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桶和罐子在正确的位置。 我在使用标准语法时也得到了相同的结果。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Charles Green    8 年前

    发现我的期望不正确。当通过CLI创建新作业并仅包括JAR参数时,将创建一个自定义JAR项目。如果火花args(即。 --conf )还将传递到CLI,然后创建Spark作业。

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

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