我在做什么:
尝试连接Spark和Cassandra以从Spark检索存储在cassandra表中的数据。
我遵循了哪些步骤:
下载cassandra 2.1.12和spark 1.4.1。
用sudo build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean packag
和sbt/sbt clean assembly
构建火花
将一些数据存储到cassandra中。
将这些罐子下载到spark/lib
中:
cassandra-driver-core2.1.1.jar 和spark-cassandra-connector_2.11-1.4.1.jar
将jar文件路径添加到conf/spark-defaults.conf
,例如
spark.driver.extraClassPath \
~/path/to/spark-cassandra-connector_2.11-1.4.1.jar:\
~/path/to/cassandra-driver-core-2.1.1.jar
我如何运行外壳程序:
在运行
./bin/cassandra
之后,我运行spark类似-sudo ./bin/pyspark
并且还尝试了
sudo ./bin/spark-shell
我在问什么
sqlContext.read.format("org.apache.spark.sql.cassandra")\
.options(table="users", keyspace="test")\
.load()\
.show()
问题:
java.lang.NoSuchMethodError:\
scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;
但是
org.apache.spark.sql.cassandra
存在于我下载的spark-cassandra-connecter.jar中。这是完整的Log Trace
我尝试了什么:
我尝试通过添加2个jar,使用选项
--packages
和--driver-class-path
和--jars
运行。尝试将scala降级到2.1,并尝试使用scala shell,但仍然存在相同的错误。
我一直在思考的问题-
我使用的cassandra,spark和scala版本是否彼此兼容?
我使用的jar文件版本正确吗?
我是否以错误的方式编译spark?
我是否缺少某些东西或做错了什么?
我真的是火花和卡桑德拉的新手,所以我真的需要一些建议!花费了数小时的时间,这可能是微不足道的。
最佳答案
一些注意事项
您正在为2.10构建Spark,并为2.11使用Spark Cassandra Connector库。要为2.11构建Spark,您需要使用-Dscala-2.11
标志。这很可能是导致错误的主要原因。
仅在您的项目中实际包括连接器的情况下,仅包含没有依赖项的核心库是不够的。如果您超过了第一个错误,则很可能会看到其他类未从缺少的部门找到错误。
这就是为什么建议使用Spark Packages网站和--packages
标志的原因。这将包括一个具有所有必需依赖项的“ fat-jar”。看到
http://spark-packages.org/package/datastax/spark-cassandra-connector
对于Spark 1.4.1和pyspark这将是
//Scala 2.10
$SPARK_HOME/bin/pyspark --packages datastax:spark-cassandra-connector:1.4.1-s_2.10
//Scala 2.11
$SPARK_HOME/bin/pyspark --packages datastax:spark-cassandra-connector:1.4.1-s_2.11
您永远不必使用
--packages
方法手动下载jar。不要使用spark.driver.extraClassPath,它只会将依赖项添加到驱动程序中,远程代码将无法使用这些依赖项。