2016-08-17 54 views
1

我配置了spark 2.0 shell以与datastax cassandra连接器一起运行。Spark 2.0 Cassandra Scala Shell错误:NoClassDefFoundError

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

当外壳

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 
+0

我认为你的方法存在的问题是,cassandra连接器无法在类路径中找到某些类。您可以制作一个胖罐子(例如使用cassandra连接器运行'sbt assembly'),然后在Spark shell中使用此本地罐子。 – leshkin

回答

3

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

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

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

+0

这解决了问题! – user896993

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 

试试吧,让我知道。

1

连接器版本1.5与Spark 2.0不兼容。检出当前主分支或2.0.0-m1的标签。 SBT大会在这个分支上创建的脂肪罐应该可以工作。我们应该很快为这个资源提供官方的spark包和maven协调。

相关问题