连接火花和卡桑德拉时出错



我在做什么:

  • 尝试连接 Spark 和 Cassandra 以从 Spark 检索存储在 cassandra 表中的数据。

我遵循了哪些步骤:

  • 下载 cassandra 2.1.12Spark 1.4.1
  • sudo build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean packagsbt/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,但仍然出现相同的错误。

我一直在思考的问题——

  1. 我使用的 cassandra、spark 和 scala 版本是否相互兼容?
  2. 我是否使用了正确版本的 jar 文件?
  3. 我是否以错误的方式编译了火花?
  4. 我错过了什么或做错了什么吗?

我对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,它只会将依赖添加到驱动程序中,远程代码将无法使用该依赖。

相关内容

  • 没有找到相关文章

最新更新