为什么在YARN集群模式下提交Spark应用会出现ExceptionInInitializerError?
Why ExceptionInInitializerError when submitting Spark application in YARN cluster mode?
我使用的是 spark "Spark 1.6.1-mapr-1604 " 版本。
我在本地模式下的作业成功执行,但是当我在 yarn 集群模式下启动相同的作业时,它抛出 ExceptionInInitializerError
。
本地模式命令:
spark-submit --class com.ts.clustering.TrainModel \
ts-0.0.1-SNAPSHOT.jar \
-model /user/hive/warehouse/ts/clustering_model
-ip /user/hive/warehouse/ts/aidata_seq/*
-k 10 -ite 10 > app_2.log &
Yarn集群模式:
spark-submit --queue dev --master yarn \
--deploy-mode cluster \
--class com.ts.clustering.TrainModel ts-0.0.1-SNAPSHOT.jar \
-model /user/hive/warehouse/ts/clustering_model \
-ip /user/hive/warehouse/ts/aidata_seq/* -k 10 -ite 10 > app_2.log &
-model
参数为模型保存的输出位置。
集群模式异常:
2016-08-29 17:18:46,312 WARN [task-result-getter-0] scheduler.TaskSetManager:
Lost task 0.0 in stage 0.0 (TID 0, ******************): java.lang.ExceptionInInitializerError
at com.ts.clustering.TrainModel.call(TrainModel.java:71)
at com.ts.clustering.TrainModel.call(TrainModel.java:67)
at org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction.apply(JavaPairRDD.scala:1015)
at scala.collection.Iterator$$anon.next(Iterator.scala:328)
at scala.collection.Iterator$$anon.hasNext(Iterator.scala:389)
at org.apache.spark.storage.MemoryStore.unrollSafely(MemoryStore.scala:284)
Caused by: org.apache.spark.SparkException: A master URL must be set in your configuration
at org.apache.spark.SparkContext.<init>(SparkContext.scala:401)
at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:59)
at com.ts.clustering.TrainModel.<clinit>(TrainModel.java:35)
... 21 more
我浏览过几个类似的帖子,但没有任何帮助。任何建议都会有很大帮助。
查看堆栈跟踪,我可以发现以下内容:
org.apache.spark.SparkException: A master URL must be set in your configuration
at org.apache.spark.SparkContext.(SparkContext.scala:401)
at org.apache.spark.api.java.JavaSparkContext.(JavaSparkContext.scala:59)
at com.ts.clustering.TrainModel.(TrainModel.java:35)
... 21 more
这很容易说你没有指定 master URL 但是你已经使用 --master yarn --deploy-mode cluster
启动了应用程序。
我 猜测 您已经将 master URL 硬编码为 local
或者根本没有指定它。参见 TrainModel.java:35
。
我使用的是 spark "Spark 1.6.1-mapr-1604 " 版本。
我在本地模式下的作业成功执行,但是当我在 yarn 集群模式下启动相同的作业时,它抛出 ExceptionInInitializerError
。
本地模式命令:
spark-submit --class com.ts.clustering.TrainModel \
ts-0.0.1-SNAPSHOT.jar \
-model /user/hive/warehouse/ts/clustering_model
-ip /user/hive/warehouse/ts/aidata_seq/*
-k 10 -ite 10 > app_2.log &
Yarn集群模式:
spark-submit --queue dev --master yarn \
--deploy-mode cluster \
--class com.ts.clustering.TrainModel ts-0.0.1-SNAPSHOT.jar \
-model /user/hive/warehouse/ts/clustering_model \
-ip /user/hive/warehouse/ts/aidata_seq/* -k 10 -ite 10 > app_2.log &
-model
参数为模型保存的输出位置。
集群模式异常:
2016-08-29 17:18:46,312 WARN [task-result-getter-0] scheduler.TaskSetManager:
Lost task 0.0 in stage 0.0 (TID 0, ******************): java.lang.ExceptionInInitializerError
at com.ts.clustering.TrainModel.call(TrainModel.java:71)
at com.ts.clustering.TrainModel.call(TrainModel.java:67)
at org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction.apply(JavaPairRDD.scala:1015)
at scala.collection.Iterator$$anon.next(Iterator.scala:328)
at scala.collection.Iterator$$anon.hasNext(Iterator.scala:389)
at org.apache.spark.storage.MemoryStore.unrollSafely(MemoryStore.scala:284)
Caused by: org.apache.spark.SparkException: A master URL must be set in your configuration
at org.apache.spark.SparkContext.<init>(SparkContext.scala:401)
at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:59)
at com.ts.clustering.TrainModel.<clinit>(TrainModel.java:35)
... 21 more
我浏览过几个类似的帖子,但没有任何帮助。任何建议都会有很大帮助。
查看堆栈跟踪,我可以发现以下内容:
org.apache.spark.SparkException: A master URL must be set in your configuration
at org.apache.spark.SparkContext.(SparkContext.scala:401)
at org.apache.spark.api.java.JavaSparkContext.(JavaSparkContext.scala:59)
at com.ts.clustering.TrainModel.(TrainModel.java:35)
... 21 more
这很容易说你没有指定 master URL 但是你已经使用 --master yarn --deploy-mode cluster
启动了应用程序。
我 猜测 您已经将 master URL 硬编码为 local
或者根本没有指定它。参见 TrainModel.java:35
。