【问题标题】:Spark 2.0.0 streaming job packed with sbt-assembly lacks Scala runtime methods包含 sbt-assembly 的 Spark 2.0.0 流式作业缺少 Scala 运行时方法
【发布时间】:2017-01-16 15:46:05
【问题描述】:

在 Spark Streaming 2.0.0 作业中使用 -> 或使用 spark-streaming-kafka-0-8_2.11 v2.0.0 并使用 spark-submit 提交时,我收到以下错误:

线程“主”org.apache.spark.SparkException 中的异常:作业因阶段失败而中止:阶段 72.0 中的任务 0 失败 1 次,最近一次失败:阶段 72.0 中丢失任务 0.0(TID 37,本地主机): java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object;

我将这种现象的简要说明放到了 GitHub 存储库中:spark-2-streaming-nosuchmethod-arrowassoc

仅将提供的依赖项放入build.sbt

"org.apache.spark" %% "spark-core" % "2.0.0" % "provided",
"org.apache.spark" %% "spark-streaming" % "2.0.0" % "provided"

在驱动程序代码中的任何位置使用->,将其与sbt-assembly 打包并提交作业会导致错误。这本身不是什么大问题,可以避免使用ArrayAssoc,但是spark-streaming-kafka-0-8_2.11 v2.0.0 里面有它,并且会产生同样的错误。

这样做:

wordCounts.map{
  case (w, c) => Map(w -> c)
}.print()

然后

sbt assembly

然后

spark-2.0.0-bin-hadoop2.7/bin/spark-submit \
--class org.apache.spark.examples.streaming.NetworkWordCount \
--master local[2] \
--deploy-mode client \
./target/scala-2.11/spark-2-streaming-nosuchmethod-arrowassoc-assembly-1.0.jar \
localhost 5555

【问题讨论】:

  • 你的 uber JAR 中是否包含 Scala?
  • 是的,sbt-assembly 默认包含 Scala 运行时。但为了确保这一点,我也尝试过明确要求。

标签: scala spark-streaming sbt-assembly


【解决方案1】:
  1. Spark 作业应该在没有 Scala 运行时的情况下打包,即,如果您使用 sbt-assembly 进行打包,请添加:assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)
  2. 我刚刚将我的 SPARK_HOME 环境变量指向 Spark 1.6.2,不管你从哪里运行 spark-submitSPARK_HOME 都应该正确设置。

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2014-08-23
    • 2017-02-25
    • 2014-03-19
    • 2015-10-07
    • 2017-04-17
    相关资源
    最近更新 更多