gpt4 book ai didi

scala - Spark 和预测 IO : NoClassDefFoundError Despite Dependency Existing

转载 作者:行者123 更新时间:2023-12-04 16:01:28 25 4
gpt4 key购买 nike

问题:

我正在尝试使用 Spark 1.6.1 和 PredictionIO 0.9.5 训练一个 Prediction IO 项目,但在 Executors 开始工作后作业立即失败。这在 Stand-Alone Spark 集群和 Mesos 集群中都会发生。在这两种情况下,我都从远程客户端部署到集群,即我正在运行 pio train -- --master [master on some other server]

症状:

  • 在驱动程序日志中,在第一个 [Stage 0:> (0 + 0)/2] 消息后不久,执行程序因 java.lang.NoClassDefFoundError: Could not初始化类 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.jar 添加到 pio train 没有解决问题
  • 使用 pio build --clean --uber-jar 创建 uber jar 并不能解决问题
  • 将从站上的SPARK_CLASSPATH设置为pio-assembly-0.9.5.jar的本地副本确实解决了问题

据我所知,SPARK_CLASSPATH 已弃用,提交时应替换为 --jars。我宁愿不依赖于已弃用的功能。在调用 pio train 或使用我的基础架构时,我是否遗漏了什么?执行程序从驱动程序获取依赖项时是否存在缺陷(例如竞争条件)?

最佳答案

问题是 java.lang.NoClassDefFoundError: Could not initialize class 实际上并不意味着依赖项不存在,而是一个命名不当的异常,真正的问题是类加载器在加载类时遇到问题。实际问题将以 java.lang.ExceptionInInitializerError 的形式报告,这很可能是从静态代码块中抛出的。很难区分 java.lang.NoClassDefFoundErrorjava.lang.ClassNotFoundException 之间的区别,但后者实际上意味着缺少依赖项(this question其他人提供了更多细节)。

关于scala - Spark 和预测 IO : NoClassDefFoundError Despite Dependency Existing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37169484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com