gpt4 book ai didi

scala - NoClassDefFoundError : Could not initialize XXX class after deploying on spark standalone cluster

转载 作者:行者123 更新时间:2023-12-03 16:15:08 26 4
gpt4 key购买 nike

我写了一个用 sbt 构建的 Spark 流应用程序。它在本地工作得很好,但是在部署到集群上之后,它提示我在胖 jar 中清楚地写了一个类(使用 jar tvf 检查)。以下是我的项目结构。 XXX对象是spark提示的对象

src
`-- main
`-- scala
|-- packageName
| `-- XXX object
`-- mainMethodEntryObject

我的提交命令:
$SPARK_HOME/bin/spark-submit \
--class mainMethodEntryObject \
--master REST_URL\
--deploy-mode cluster \
hdfs:///FAT_JAR_PRODUCED_BY_SBT_ASSEMBLY

具体错误信息:
java.lang.NoClassDefFoundError: Could not initialize class XXX

最佳答案

由于与该用户类似的原因,我遇到了这个问题:
http://apache-spark-developers-list.1001551.n3.nabble.com/java-lang-NoClassDefFoundError-is-this-a-bug-td18972.html

我正在调用一个对象上的方法,该对象本身定义了一些变量,包括 spark 和记录器,就像这样

val spark = SparkSession
.builder()
.getOrCreate()

val logger = LoggerFactory.getLogger(this.getClass.getName)

我调用的函数调用了对象上的另一个函数,该函数调用了另一个函数,该函数调用了 flatMap 内部对象上的另一个函数。调用 rdd。

我收到了 NoClassDefFoundError堆栈跟踪中的错误,其中堆栈跟踪中的前 2 个函数调用是 Spark 告诉我不存在的类上的函数。

根据上面链接的对话,我的假设是全局 spark当使用它的函数被调用时,引用没有被初始化(导致 NoClassDefFoundError 异常的那个)。

经过多次实验,我发现这种模式可以解决问题。
// Move global definitions here
object MyClassGlobalDef {

val spark = SparkSession
.builder()
.getOrCreate()

val logger = LoggerFactory.getLogger(this.getClass.getName)

}

// Force the globals object to be initialized
import MyClassGlobalDef._

object MyClass {
// Functions here
}

这有点难看,但 Spark 似乎喜欢它。

关于scala - NoClassDefFoundError : Could not initialize XXX class after deploying on spark standalone cluster,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43624401/

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