我在做什么:
- 尝试连接 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
,我跑火花像——
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
存在于我下载的火花卡桑德拉连接器中.jar。
这是完整的日志跟踪
我试过什么:
- 我尝试使用选项
--packages
运行,并通过添加 2 个罐子来--driver-class-path
和--jars
选项。 - 尝试将 scala 降级到 2.1 并尝试使用 scala shell,但仍然出现相同的错误。
我一直在思考的问题——
- 我使用的 cassandra、spark 和 scala 版本是否相互兼容?
- 我是否使用了正确版本的 jar 文件?
- 我是否以错误的方式编译了火花?
- 我错过了什么或做错了什么吗?
我对Spark和Cassandra真的很陌生,所以我真的需要一些建议!花了几个小时在这上面,可能是微不足道的。
一些注意事项
一个你正在为 2.10 构建 Spark 并为 2.11 使用 Spark Cassandra 连接器库。要为 2.11 构建 Spark,您需要使用 -Dscala-2.11
标志。这很可能是错误的主要原因。
项目中实际包含连接器,仅包含没有依赖项的核心库是不够的。如果您通过了第一个错误,您很可能会从缺失的 deps 中看到其他类未找到错误。
这就是为什么建议使用 Spark 包网站和--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,它只会将依赖添加到驱动程序中,远程代码将无法使用该依赖。