【发布时间】:2016-05-11 17:26:54
【问题描述】:
问题:
我正在尝试使用 Spark 1.6.1 和 PredictionIO 0.9.5 训练一个 Prediction IO 项目,但在 Executor 开始工作后该作业立即失败。这发生在独立 spark 集群和 Mesos 集群中。在这两种情况下,我都从远程客户端部署到集群,即我正在运行pio train -- --master [master on some other server]。
症状:
- 在驱动程序日志中,在第一条
[Stage 0:> (0 + 0) / 2]消息之后不久,执行程序因java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.protobuf.ProtobufUtil而死亡
调查:
-
在
pio-assemblyjar 中找到问题类:jar -tf pio-assembly-0.9.5.jar | grep ProtobufUtil org/apache/hadoop/hbase/protobuf/ProtobufUtil$1.class org/apache/hadoop/hbase/protobuf/ProtobufUtil.class - 提交时,这个jar会随项目一起部署,可以在executors中找到
- 将
--jars pio-assembly-0.9.5.jar添加到pio train并不能解决问题 - 使用
pio build --clean --uber-jar创建 uber jar 并不能解决问题 - 将从属服务器上的
SPARK_CLASSPATH设置为pio-assembly-0.9.5.jar的本地副本确实解决了问题
据我所知,SPARK_CLASSPATH 已被弃用,提交时应替换为--jars。我宁愿不依赖于已弃用的功能。致电pio train 或使用我的基础架构时,我是否遗漏了什么?执行程序从驱动程序获取依赖项是否存在缺陷(例如竞争条件)?
【问题讨论】:
标签: scala apache-spark jar mesos predictionio