Spark:Fat-JAR使用NullPointerException崩溃Zeppelin

时间:2018-01-31 07:45:11

标签: apache-spark emr amazon-emr apache-zeppelin sbt-assembly

注意:这不是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有关

问题Scalaval 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

1 个答案:

答案 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"