What I'm doing:
- 尝试连接Spark和Cassandra以从spark检索存储在cassandra表中的数据 .
What steps have I followed:
-
下载 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
Build 火花 -
将一些数据存储到cassandra中 .
-
将这些 jar 下载到
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
How am I running the shell:
运行 ./bin/cassandra
后,我运行火花像 -
sudo ./bin/pyspark
并尝试用 sudo ./bin/spark-shell
What query am I making
sqlContext.read.format("org.apache.spark.sql.cassandra")\
.options(table="users", keyspace="test")\
.load()\
.show()
The problem:
java.lang.NoSuchMethodError:\
scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;
但 org.apache.spark.sql.cassandra
出现在我下载的spark-cassandra-connecter.jar中 .
这是完整的Log Trace
What have I tried:
-
我尝试通过添加2个 jar 来运行选项
--packages
和--driver-class-path
以及--jars
选项 . -
尝试将scala降级为2.1并尝试使用scala shell但仍然出现相同的错误 .
Questions I've been thinking about-
-
我正在使用的cassandra,spark和scala的版本是否相互兼容?
-
我使用的是正确版本的jar文件吗?
-
我是否以错误的方式编译火花?
-
我错过了什么或做错了什么?
我真的很喜欢spark和cassandra,所以我真的需要一些建议!花了好几个小时,这可能是微不足道的 .
1 回答
几点说明
一个是你为2.10构建spark并使用Spark Cassandra Connector库2.11 . 要为2.11构建spark,您需要使用
-Dscala-2.11
标志 . 这很可能是导致错误的主要原因 .接下来实际包含项目中的连接器,只包括没有依赖项的核心库是不够的 . 如果您超过第一个错误,您很可能会看到缺少的deps中的其他类未找到错误 .
这就是为什么建议使用Spark Packages网站和
--packages
标志 . 这将包含"fat-jar",它具有所有必需的依赖项 . 见http://spark-packages.org/package/datastax/spark-cassandra-connector对于Spark 1.4.1和pyspark,这将是
您永远不必使用
--packages
方法手动下载jar .不要使用spark.driver.extraClassPath,它只会向驱动程序添加依赖项远程代码将无法使用依赖项 .