使用 spark-cassandra 连接器的错误 运行 spark 应用程序
Error running spark app using spark-cassandra connector
我已经编写了一个基本的 spark 应用程序,可以按照本指南读取和写入 Cassandra (https://github.com/datastax/spark-cassandra-connector/blob/master/doc/0_quick_start.md)
此应用的 .sbt 如下所示:
name := "test Project"
version := "1.0"
scalaVersion := "2.10.5"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.2.1",
"com.google.guava" % "guava" % "14.0.1",
"com.datastax.spark" %% "spark-cassandra-connector" % "1.2.1",
"org.apache.cassandra" % "cassandra-thrift" % "2.0.14",
"org.apache.cassandra" % "cassandra-clientutil" % "2.0.14",
"com.datastax.cassandra" % "cassandra-driver-core" % "2.0.14"
)
如您所见,Spark 版本是 1.2.1(而不是像许多其他问题那样的 1.3.1)但是当我 运行 这个应用程序使用spark-submit 我还是运行 进入错误:
WARN TaskSetManager: Lost task 1.0 in stage 0.0 (TID 1, abcdev26): java.lang.NoSuchMethodError: org.apache.spark.executor.TaskMetrics.inputMetrics_$eq(Lscala/Option;)V
at com.datastax.spark.connector.metrics.InputMetricsUpdater$.apply(InputMetricsUpdater.scala:61)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.compute(CassandraTableScanRDD.scala:196)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:61)
at org.apache.spark.scheduler.Task.run(Task.scala:64)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:203)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
我错过了什么?
到目前为止我搜索过的所有答案都建议使用我已经在做的 1.2.1。
如有任何建议,我们将不胜感激!
您是否 100% 确定您 运行 反对 Spark 1.2.1?也在执行人身上?
问题在于此度量访问器在 Spark 1.3.0 中变为私有,因此在运行时无法找到。参见 TaskMetrics.scala - Spark 1.2.2 vs TaskMetrics.scala - spark v1.3.0,所以很可能某处有 Spark1.3.x 版本。
确保相同的版本 1.2.x 也在所有执行程序上。
我已经编写了一个基本的 spark 应用程序,可以按照本指南读取和写入 Cassandra (https://github.com/datastax/spark-cassandra-connector/blob/master/doc/0_quick_start.md)
此应用的 .sbt 如下所示:
name := "test Project"
version := "1.0"
scalaVersion := "2.10.5"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.2.1",
"com.google.guava" % "guava" % "14.0.1",
"com.datastax.spark" %% "spark-cassandra-connector" % "1.2.1",
"org.apache.cassandra" % "cassandra-thrift" % "2.0.14",
"org.apache.cassandra" % "cassandra-clientutil" % "2.0.14",
"com.datastax.cassandra" % "cassandra-driver-core" % "2.0.14"
)
如您所见,Spark 版本是 1.2.1(而不是像许多其他问题那样的 1.3.1)但是当我 运行 这个应用程序使用spark-submit 我还是运行 进入错误:
WARN TaskSetManager: Lost task 1.0 in stage 0.0 (TID 1, abcdev26): java.lang.NoSuchMethodError: org.apache.spark.executor.TaskMetrics.inputMetrics_$eq(Lscala/Option;)V
at com.datastax.spark.connector.metrics.InputMetricsUpdater$.apply(InputMetricsUpdater.scala:61)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.compute(CassandraTableScanRDD.scala:196)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:61)
at org.apache.spark.scheduler.Task.run(Task.scala:64)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:203)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
我错过了什么? 到目前为止我搜索过的所有答案都建议使用我已经在做的 1.2.1。
如有任何建议,我们将不胜感激!
您是否 100% 确定您 运行 反对 Spark 1.2.1?也在执行人身上?
问题在于此度量访问器在 Spark 1.3.0 中变为私有,因此在运行时无法找到。参见 TaskMetrics.scala - Spark 1.2.2 vs TaskMetrics.scala - spark v1.3.0,所以很可能某处有 Spark1.3.x 版本。
确保相同的版本 1.2.x 也在所有执行程序上。