【发布时间】:2016-03-14 18:06:53
【问题描述】:
我正在使用 Cassandra 2.1.5 (dsc)、Spark 1.2.1 和 spark-cassandra-connector 1.2.1。
当我运行 Spark 作业(scala 脚本)时,出现以下错误:
16/03/08 10:22:03 信息 DAGScheduler:作业 0 失败:减少 JsonRDD.scala:57,在线程“main”中发生了 15.051150 s 异常 org.apache.spark.SparkException:作业因阶段失败而中止: 阶段 1.0 中的任务 1 失败 1 次,最近一次失败:丢失任务 1.0 阶段 1.0(TID 4,本地主机):com.esotericsoftware.kryo.KryoException:无法找到类: org.apache.spark.sql.cassandra.CassandraS QLRow
我尝试通过以下方式执行here 所描述的操作:
/home/ubuntu/spark-1.2.1/bin/spark-submit --driver-class-path /home/ubuntu/.ivy2/cache/com.datastax.spark/spark-cassandra-connector_2.10/jars/spark-cassandra-connector_2.10-1.2.1.jar --conf spark.executor.extraClassPath=/home/ubuntu/.ivy2/cache/com.datastax.spark/spark-cassandra-connector_2.10/jars/spark-cassandra-connector_2.10-1.2.1.jar --class "$class" "$jar"
但只会得到以下错误:
线程“主”java.lang.NoClassDefFoundError 中的异常: com/datastax/驱动程序/核心/ConsistencyLevel 在 com.datastax.spark.connector.writer.WriteConf$.(WriteConf.scala:76) 在 com.datastax.spark.connector.writer.WriteConf$.(WriteConf.scala) 在 com.datastax.spark.connector.util.ConfigCheck$.(ConfigCheck.scala:23) 在 com.datastax.spark.connector.util.ConfigCheck$.(ConfigCheck.scala) 在 com.datastax.spark.connector.cql.CassandraConnectorConf$.apply(CassandraConnectorConf.scala:81) 在 com.datastax.spark.connector.cql.CassandraConnector$.apply(CassandraConnector.scala:204) 在 com.datastax.spark.connector.RDDFunctions.joinWithCassandraTable$default$5(RDDFunctions.scala:127) 在 co.crowdx.aggregation.SignalIO$.main(SignalIO.scala:92) 在 co.crowdx.aggregation.SignalIO.main(SignalIO.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:358) 在 org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75) 在 org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
引起:java.lang.ClassNotFoundException: com.datastax.driver.core.ConsistencyLevel
可能是什么问题? (我现在不想升级 spark 或 cassandra)
编辑:
我尝试运行 spark shell 以更简单的方式查看问题:
spark-1.2.1/bin/spark-shell --jars /home/ubuntu/.ivy2/cache/com.datastax.spark/spark-cassandra connector_2.10/jars/spark-cassandra-connector_2.10-1.2.1.jar --conf spark.cassandra.connection.host=11.11.11.11
并尝试运行简单的命令:
> scala> import org.apache.spark.sql.cassandra.CassandraSQLContext
> import org.apache.spark.sql.cassandra.CassandraSQLContext
>
> scala> import org.apache.spark.sql.SchemaRDD import
> org.apache.spark.sql.SchemaRDD
>
> scala> val cc = new CassandraSQLContext(sc) cc:
> org.apache.spark.sql.cassandra.CassandraSQLContext =
> org.apache.spark.sql.cassandra.CassandraSQLContext@1c41c05e
>
> scala> val rdd = cc.sql("select * from listener.scans_daily_imei_partitioned as a, listener.scans_daily_imei_partitioned as b where a.id=b.id")
我收到以下错误:
rdd: org.apache.spark.sql.SchemaRDD = SchemaRDD[0] at RDD at SchemaRDD.scala:108 == 查询计划 == == 物理计划 == com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: com/datastax/driver/core/ConsistencyLevel
【问题讨论】:
-
在您执行作业时是否会有多个版本的 spark datastax 连接器?
-
不,我明确定义了连接器的路径,为什么重要?
-
不应该,但我仍然想知道是否可能有另一个版本编译到您的 jar 中,这可能会导致问题。
标签: scala apache-spark cassandra spark-cassandra-connector