Spark 2.0 Cassandra Scala Shell错误:NoClassDefFoundError

时间:2016-08-17 12:39:33

标签: apache-spark cassandra spark-cassandra-connector

我已将spark 2.0 shell配置为使用datastax cassandra连接器运行。

spark-shell --packages datastax:spark-cassandra-connector:1.5.1-s_2.11

在shell中运行此代码段时

sc.stop
import org.apache.spark
import org.apache.spark._
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import com.datastax.spark
import com.datastax.spark._
import com.datastax.spark.connector
import com.datastax.spark.connector._
import com.datastax.spark.connector.cql
import com.datastax.spark.connector.cql._
import com.datastax.spark.connector.cql.CassandraConnector
import com.datastax.spark.connector.cql.CassandraConnector._

val conf = new SparkConf(true).set("spark.cassandra.connection.host", "dbserver")
val sc = new SparkContext("spark://localhost:7077", "test", conf)
val table = sc.cassandraTable("keyspace", "users")
println(table.count)
println(table.first)

在这一行

scala> val table = sc.cassandraTable("keyspace", "users")

获取此错误

java.lang.NoClassDefFoundError: com/datastax/spark/connector/cql/CassandraConnector$
at com.datastax.spark.connector.SparkContextFunctions.cassandraTable$default$3(SparkContextFunctions.scala:48)
... 62 elided

3 个答案:

答案 0 :(得分:3)

正如我已经说过的,一个选择是构建一个包含所有cassandra连接器依赖关系的胖jar。你可以这样做:

$ git clone https://github.com/datastax/spark-cassandra-connector.git
$ cd spark-cassandra-connector
$ sbt assembly

然后只需通过命令行参数将本地jar注入spark shell。

答案 1 :(得分:1)

您可能需要注入更多依赖项或使其版本更新。在我的 java 项目中,我使用了这些:

com.datastax.spark:spark-cassandra-connector_2.10:1.3.0-M2
com.datastax.spark:spark-cassandra-connector-java_2.10:1.3.0-M2
org.apache.spark:spark-core_2.10:1.3.0
org.apache.spark:spark-streaming_2.10:1.3.0

试试并告诉我。

答案 2 :(得分:1)

连接器版本1.5与Spark 2.0不兼容。签出当前主分支或2.0.0-m1的标记。 SBT组装在这个分支上创建的胖罐应该可以工作。我们应该很快就有这个资源的官方火花套餐和maven坐标。