【问题标题】:Spark KryoException: Unable to find class: CassandraSQLRowSpark KryoException:无法找到类:CassandraSQLRow
【发布时间】: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


【解决方案1】:

我用自编译的 spark-cassandra-connector 解决了这个问题:

wget https://github.com/datastax/spark-cassandra-connector/archive/v1.2.1.zip
unzip v1.2.1.zip
cd spark-cassandra-connector-1.2.1
sbt assembly
cp /home/ubuntu/spark-cassandra-connector-1.2.1/spark-cassandra-connector-java/target/scala-2.10/spark-cassandra-connector-java-assembly-1.2.1.jar spark-cassandra-connector-java-assembly-1.2.1-FAT.jar

并将火花用作:

/home/ubuntu/spark-1.2.1/bin/spark-submit --driver-class-path /home/ubuntu/spark-cassandra-connector-java-assembly-1.2.1-FAT.jar --conf spark.executor.extraClassPath=/home/ubuntu/spark-cassandra-connector-java-assembly-1.2.1-FAT.jar --class "$class" "$jar"

效果很好。

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2018-10-19
    • 2018-10-30
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多