2016-08-17 60 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協調。

相關問題