注意:这不是Getting NullPointerException when running Spark Code in Zeppelin 0.7.1
的重复我在Apache Zeppelin
的{{1}}内遇到了包版广告。我正在尝试将 fat-jar (位于Amazon EMR
)加载到Amazon S3
。加载 fat-jar 后,Spark interpreter
的{{1}}拒绝使用以下堆栈跟踪
显示java.lang.NullPointerException 在org.apache.zeppelin.spark.Utils.invokeMethod(Utils.java:38) 在org.apache.zeppelin.spark.Utils.invokeMethod(Utils.java:33) 在org.apache.zeppelin.spark.SparkInterpreter.createSparkContext_2(SparkInterpreter.java:398) 在org.apache.zeppelin.spark.SparkInterpreter.createSparkContext(SparkInterpreter.java:387) 在org.apache.zeppelin.spark.SparkInterpreter.getSparkContext(SparkInterpreter.java:146) 在org.apache.zeppelin.spark.SparkInterpreter.open(SparkInterpreter.java:843) 在org.apache.zeppelin.interpreter.LazyOpenInterpreter.open(LazyOpenInterpreter.java:70) at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer $ InterpretJob.jobRun(RemoteInterpreterServer.java:491) 在org.apache.zeppelin.scheduler.Job.run(Job.java:175) 在org.apache.zeppelin.scheduler.FIFOScheduler $ 1.run(FIFOScheduler.java:139) at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在java.lang.Thread.run(Thread.java:748)
即使是简单的 Zeppelin
语句,如Spark interpreter
,也无法从 jar 访问,会产生在错误日志之上。从解释器的依赖项中删除 jar 可以解决问题;很明显,它只与jar有关。
问题Scala
由val str: String = "sample string"
使用fat-jar
生成。 项目(我正在加载的 fat-jar )在父模块中包含两个Jenkins
。
虽然共享所有3个子模块的完整sbt assembly
文件和依赖文件是不切实际的,但我附上了所有依赖关系和配置的详尽列表在子模块中使用。
AWS依赖关系
submodules
build.sbt
"com.amazonaws" % "aws-java-sdk-s3" % "1.11.218"
Spark依赖(以提供 "com.amazonaws" % "aws-java-sdk-emr" % "1.11.218"
的方式提供)
"com.amazonaws" % "aws-java-sdk-ec2" % "1.11.218"
allSparkdependencies.map(_ % "provided")
"org.apache.spark" %% "spark-core" % "2.2.0"
"org.apache.spark" %% "spark-sql" % "2.2.0"
测试依赖关系
"org.apache.spark" %% "spark-hive" % "2.2.0"
"org.apache.spark" %% "spark-streaming" % "2.2.0"
其他依赖
"org.scalatest" %% "scalatest" % "3.0.3" % Test
"com.holdenkarau" %% "spark-testing-base" % "2.2.0_0.7.2" % "test"
"com.github.scopt" %% "scopt" % "3.7.0"
"com.typesafe" % "config" % "1.3.1"
"com.typesafe.play" %% "play-json" % "2.6.6"
"joda-time" % "joda-time" % "2.9.9"
"mysql" % "mysql-connector-java" % "5.1.41"
框架版本
"com.github.gilbertw1" %% "slack-scala-client" % "0.2.2"
"org.scalaj" %% "scalaj-http" % "2.3.0"
Scala v2.11.11
SBT v1.0.3
SBT配置
Spark v2.2.0
答案 0 :(得分:0)
虽然问题得到解决,老实说,我无法深入到它的根本原因(因此它是真正的解决方案)。在严格地通过论坛之后,我最终手动比较(和重新对齐)我的代码(git diff
)最后一次工作build
。 (!)
从那时起已经有一段时间了,现在当我查看我的git
历史记录时,我发现它(解决此问题的commit
)包含重构或与构建相关的内容。因此,我最好的猜测是与构建相关的问题。我正在记下我对build.sbt
所做的所有更改。
我重新尝试我无法确定是否针对这些特定修改修复了问题,所以请继续关注。我会保持这个问题的开放,直到找到结论原因(和解决方案)。
将以下依赖项标记为provided
,告诉here:
"org.apache.spark" %% "spark-core" % sparkVersion
"org.apache.spark" %% "spark-sql" % sparkVersion
"org.apache.spark" %% "spark-hive" % sparkVersion
"org.apache.spark" %% "spark-streaming" % sparkVersion
"com.holdenkarau" %% "spark-testing-base" % "2.2.0_0.7.2" % "test"
覆盖以下fasterxml.jackson
依赖项:
dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-core" % "2.6.5"
dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-databind" % "2.6.5"
dependencyOverrides += "com.fasterxml.jackson.module" % "jackson-module-scala_2.11" %
"2.6.5"
我想指出一个特别的事情:我最初认为罪魁祸首的下列LogBack
dependency实际上与此无关(我们过去遇到了LogBack
的问题,所以它适合我们责备它)。虽然我们在解决方案时将其删除了,但我们已将其添加回来。
"ch.qos.logback" % "logback-classic" % "1.2.3"