首页 文章

连接spark和cassandra时出错

提问于
浏览
2

What I'm doing:

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

What steps have I followed:

  • 下载 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 Build 火花

  • 将一些数据存储到cassandra中 .

  • 将这些 jar 下载到 spark/lib

cassandra-driver-core2.1.1.jarspark-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 回答

  • 4

    几点说明

    一个是你为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,这将是

    //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,它只会向驱动程序添加依赖项远程代码将无法使用依赖项 .

相关问题