AWS EMR上でJava記述スパークアプリケーションを実行する際に問題があります。 ローカルでは、すべて正常に動作します。私がEMRに仕事を提出するとき、私は仕事が分を取るべきであるにもかかわらず、20秒でいつも "Completed"を得る。出力が生成されず、ログメッセージも印刷されません。AWS EMRでJava Sparkプログラムを実行しています
私はまだ天気がSpark
アプリケーションまたはCUSTOM_JAR
タイプとして実行する必要があります混乱しています。
私の主な方法のルック:私はこれらを試してみた
public static void main(String[] args) throws Exception {
SparkSession spark = SparkSession
.builder()
.appName("RandomName")
.getOrCreate();
//process stuff
String from_path = args[0];
String to_path = args[1];
Dataset<String> dataInput = spark.read().json(from_path).toJSON();
JavaRDD<ResultingClass> map = dataInput.toJavaRDD().map(row -> convertData(row)); //provided function didn't include here
Dataset<Row> dataFrame = spark.createDataFrame(map, ResultingClass.class);
dataFrame
.repartition(1)
.write()
.mode(SaveMode.Append)
.partitionBy("year", "month", "day", "hour")
.parquet(to_path);
spark.stop();
}
:
1)
aws emr add-steps --cluster-id j-XXXXXXXXX --steps \
Type=Spark,Name=MyApp,Args=[--deploy-mode,cluster,--master,yarn, \
--conf,spark.yarn.submit.waitAppCompletion=false, \
--class,com.my.class.with.main.Foo,s3://mybucket/script.jar, \
s3://partitioned-input-data/*/*/*/*/*.txt, \
s3://output-bucket/table-name], \
ActionOnFailure=CONTINUE --region us-west-2 --profile default
エラーなしで15秒で完了し、出力結果やログI追加されました。 Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession
2)
aws emr add-steps --cluster-id j-XXXXXXXXX --steps \
Type=CUSTOM_JAR, \
Jar=s3://mybucket/script.jar, \
MainClass=com.my.class.with.main.Foo, \
Name=MyApp, \
Args=[--deploy-mode,cluster, \
--conf,spark.yarn.submit.waitAppCompletion=true, \
s3://partitioned-input-data/*/*/*/*/*.txt, \
s3://output-bucket/table-name], \
ActionOnFailure=CONTINUE \
--region us-west-2 --profile default
代わりバケット
3)
aws emr add-steps --cluster-id j-XXXXXXXXX --steps \
Type=CUSTOM_JAR, \
Jar=s3://mybucket/script.jar, \
MainClass=com.my.class.with.main.Foo, \
Name=MyApp, \
Args=[s3://partitioned-input-data/*/*/*/*/*.txt, \
s3://output-bucket/table-name], \
ActionOnFailure=CONTINUE \
--region us-west-2 --profile default
私はこれを取得する第二のように、第1のパラメータとして--deploy-mode
とcluster
を見て、誤ったパラメータを読み込み
私は(私はローカルにする必要はありません)すべての依存関係
が含まれている場合、私は得る:Exception in thread "main" org.apache.spark.SparkException: A master URL must be set in your configuration
私はアプリに"yarn"
をハードコーディングする必要はありません。
AWSのドキュメントは、これを実行する適切な方法について非常に混乱しています。
更新:
は、サーバー上で直接コマンドを実行する作業を行います。だから問題は私がcliコマンドを定義する方法でなければならない。
spark-submit --class com.my.class.with.main.Foo \
s3://mybucket/script.jar \
"s3://partitioned-input-data/*/*/*/*/*.txt" \
"s3://output-bucket/table-name"
EMRマシンへのSSH接続にアクセスできますか? –
私は持っています。私は仕事のATMではない。 –
私はあなたの 'Args'パラメータに' - master yarn'を使わないのが分かりません...この質問は混乱しています。 :/ – eliasah