2017-06-09 9 views
0

私はAWSCLI、EMRステップを介してEMRにスパークジョブを送信しています。また、スパーク設定は別々のjsonファイルとして提供されています。何らかの理由で、メインクラスの名前が不要なコマンドライン引数としてSpark jarに渡され、失敗したジョブが発生します。AWS EMRスパークステップargsバグ

AWSCLIコマンド:

[ 
    { 
    "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" 
    ] 
    } 
] 

私のメインクラスの引数パーサがエラーをスロー(及び提供されたパラメータを印刷):私のEMR手順を説明

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 \ 

JSONファイル

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で定義したメインクラスは何らかの理由で別々にリークします提供されたコマンドライン引数。

どうしたのですか?

答えて

1

EMR手順の仕組みに誤解がありました。

Jar = "command-runner.jar"でType = "CUSTOM_JAR"を使用し、Argsに通常のspark-submit呼び出しを追加することができました。

Type = "Spark"を使用すると、単に最初の引数として「spark-submit」コールが追加されますが、まだマスター、jarロケーション、メインクラスなどを提供する必要があります。

関連する問題