使用sbt-assembly打包的Spark 2.0.0流作业缺少Scala运行时方法

时间:2016-09-08 15:58:58

标签: scala spark-streaming sbt-assembly

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

  

线程中的异常" main" org.apache.spark.SparkException:作业因阶段失败而中止:阶段72.0中的任务0失败1次,最近失败:阶段72.0中丢失的任务0.0(TID 37,localhost):java.lang.NoSuchMethodError:scala.Predef $ .ArrowAssoc(Ljava /郎/对象;)Ljava /郎/对象;

我在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

1 个答案:

答案 0 :(得分:0)

  1. 应该在没有Scala运行时的情况下打包Spark作业,即,如果您使用sbt-assembly执行此操作,请添加:assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)
  2. 我刚刚将SPARK_HOME环境变量指向Spark 1.6.2,从spark-submit开始运行SPARK_HOME并不重要, while($row = mysql_fetch_array($req)){ $acdata[] = array( 'name' => $name, 'firstname' => $firstname, 'mail' => $mail, 'nationality' => $nationality, 'city' => $city ); } header('Content-type: application/json'); echo json_encode(array('acdata'=>$acdata)); 应该正确设置。