Dr.*_*Pro 5 deployment scala apache-spark spark-streaming spark-submit
我写了一个用 sbt 构建的火花流应用程序。它在本地工作得很好,但是在部署到集群上之后,它抱怨我在胖 jar 中清楚地写了一个类(使用 jar tvf 检查)。以下是我的项目结构。XXX对象是spark抱怨的对象
src
`-- main
`-- scala
|-- packageName
| `-- XXX object
`-- mainMethodEntryObject
Run Code Online (Sandbox Code Playgroud)
我的提交命令:
$SPARK_HOME/bin/spark-submit \
--class mainMethodEntryObject \
--master REST_URL\
--deploy-mode cluster \
hdfs:///FAT_JAR_PRODUCED_BY_SBT_ASSEMBLY
Run Code Online (Sandbox Code Playgroud)
具体错误信息:
java.lang.NoClassDefFoundError: Could not initialize class XXX
Run Code Online (Sandbox Code Playgroud)
没有代码很难说,但看起来像是 XXX 对象的序列化问题。我不能说我完全理解为什么,但重点是该对象没有运送到执行者。
对我有用的解决方案是将您的对象转换为扩展的类Serializable,并在您需要的地方实例化它。所以基本上,如果我没记错的话,你有
object test {
def foo = ...
}
Run Code Online (Sandbox Code Playgroud)
这将在你的 main 中使用test.foo,但你至少需要
class Test extends Serializable {
def foo = ...
}
Run Code Online (Sandbox Code Playgroud)
然后在你的主要部分val test = new Test开始,就是这样。
| 归档时间: |
|
| 查看次数: |
3740 次 |
| 最近记录: |