【问题标题】:Why ExceptionInInitializerError when submitting Spark application in YARN cluster mode?为什么在YARN集群模式下提交Spark应用程序时出现ExceptionInInitializerError?
【发布时间】:2016-08-29 22:43:08
【问题描述】:

我使用的是 spark“Spark 1.6.1-mapr-1604”版本。
我在本地模式下的作业成功执行,但是当我在纱线集群模式下启动相同的作业时,它会抛出 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 &

纱线簇模式:

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$2.call(TrainModel.java:71)
        at com.ts.clustering.TrainModel$2.call(TrainModel.java:67)
        at org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1.apply(JavaPairRDD.scala:1015)
        at scala.collection.Iterator$$anon$11.next(Iterator.scala:328)
        at scala.collection.Iterator$$anon$14.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

我已经浏览了几个类似的帖子,但没有任何帮助。任何建议都会有很大帮助。

【问题讨论】:

  • 我投票结束这个问题,因为缺少 MVCE 并且属于题外话规则“为什么我的代码不起作用”

标签: apache-spark mapr


【解决方案1】:

查看堆栈跟踪,我可以发现以下内容:

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

这很容易说您没有指定主 URL,但您已经使用 --master yarn --deploy-mode cluster 启动了应用程序。

猜测您已将主 URL 硬编码为 local 或根本没有指定它。见TrainModel.java:35

【讨论】:

  • 我根本没有指定主网址。我的其他 spark 工作在没有主 url 的情况下运行良好。
  • TrainModel.java:71 有什么内容?
  • 我在第 71 行询问了 TrainModel 中的具体行。那里有什么?你能显示TrainModel的第71和35行吗?
  • 参数-model /user/hive/warehouse/ts/clustering_model 是干什么用的?这是读取模型还是写入模型?
  • 我认为 OP 可能已保存此模型,然后尝试在未启动 SC 的情况下加载它。我仍然期待在代码中找到一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
相关资源
最近更新 更多