spark和预测io:noclassdeffounderror尽管存在依赖关系

5cg8jx4n  于 2021-06-26  发布在  Mesos
关注(0)|答案(1)|浏览(484)

问题:
我正在尝试使用spark1.6.1和predictionio0.9.5来训练一个predictionio项目,但是在执行者开始工作之后,这个任务就立即失败了。这发生在一个独立的星团和一个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-assembly jar:

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.jarpio train 无法解决问题
使用创建uber jar pio build --clean --uber-jar 无法解决问题
设置 SPARK_CLASSPATH 关于奴隶的一个本地副本 pio-assembly-0.9.5.jar 解决问题了吗
据我所知, SPARK_CLASSPATH 已弃用,应替换为 --jars 提交时。我不想依赖一个不推荐的特性。我打电话时有什么遗漏吗 pio train 还是我的基础设施?执行器从驱动程序获取依赖项时是否存在缺陷(例如争用条件)?

vxf3dgd4

vxf3dgd41#

问题是 java.lang.NoClassDefFoundError: Could not initialize class 实际上并不意味着依赖不存在,而是它是一个名称不好的异常,真正的问题是类装入器在装入类时遇到了问题。实际问题将以 java.lang.ExceptionInInitializerError 可能会从静态代码块中抛出。很难区分两者之间的区别 java.lang.NoClassDefFoundError 以及 java.lang.ClassNotFoundException ,但后者实际上意味着缺少依赖性(这个问题和其他问题提供了更多细节)。

相关问题