Spark Cassandra 连接器基础简单程序获取火花记录错误

Posted

技术标签:

【中文标题】Spark Cassandra 连接器基础简单程序获取火花记录错误【英文标题】:Spark Cassandra connector base simple program getting spark logging error 【发布时间】:2018-06-27 06:05:59 【问题描述】:

我正在为 java+spark+cassandra 尝试一个非常基本的 hello world 程序。

最初我有一些导致 NoSuchMethodError (#5) 的混合版本的库。当我得到正确的版本时,我得到了火花日志记录的 noclassdefound 错误(#4)。这是来自 cassandra 连接器代码。我是从 github 的 b2.3 分支构建的,它只是 master 后面的几个提交(使用 sbt)。

火花日志记录问题的所有解决方案都指向旧版本。这对我们来说不是一个实际的解决方案,因为我们需要为未来的发展解决这个问题。 想知道为什么 cassandra 连接器的最新稳定版本指的是现在不再可用的 spark 日志记录? 任何帮助表示赞赏。

Spark 版本:2.3.0 卡桑德拉:3.9.0

下面贴上相关代码sn-p。

   #1 SparkConf sparkConf = new SparkConf().setAppName("appname")
        .setMaster("local");
   #2 sparkConf.set("spark.cassandra.connection.host", "127.0.0.1"); 

   #3 JavaSparkContext ctx = new JavaSparkContext(sparkConf);

   #4 CassandraConnector connector = CassandraConnector.apply(ctx.getConf()); <<<< org/apache/spark/logging noclassdeffound error

   #5 try (Session session = connector.openSession())  <<< nosuchmethoderror: scala.runtime.objectref.zero()lscala/runtime/objectref

POM 在下面

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.mygroup 阿帕奇火花 1.0-快照 罐 阿帕奇火花 http://maven.apache.org

<dependencies>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId> 
        <version>2.2.1</version>
    </dependency> 

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.3.1</version>
    </dependency>


    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-streaming_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>

    <dependency>
        <groupId>com.datastax.spark</groupId>
        <artifactId>spark-cassandra-connector-java_2.11</artifactId>
        <version>1.6.0-M1</version>
    </dependency>  
    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>3.5.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.thrift</groupId>
        <artifactId>libthrift</artifactId>
        <version>0.11.0</version>
    </dependency>

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <org.apache.spark.spark-core.version>2.2.1</org.apache.spark.spark-core.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

【问题讨论】:

【参考方案1】:

首先要解决的是

<dependency>
    <groupId>com.datastax.spark</groupId>
    <artifactId>spark-cassandra-connector-java_2.11</artifactId>
    <version>1.6.0-M1</version>
</dependency>  

这与您的任何其他构建版本都不匹配。 Java 模块被合并到主工件中。您也不应该单独包含 java 驱动程序模块,因为这很可能会导致 guava 包含问题。

看看

https://github.com/datastax/SparkBuildExamples/blob/master/scala/maven/oss/pom.xml 例如 pom 文件。

【讨论】:

感谢您的回复。我删除了 java 连接器依赖项并摆脱了 spark 日志记录问题,但我又回到了这个问题:线程“main”java.lang.NoSuchMethodError 中的异常:scala.runtime.ObjectRef.zero()Lscala/runtime/ObjectRef;在 com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala) 下一个问题是 spark sql 是 2.3 而所有其他 spark 库都是 2.2.1 如果你转到 2.3,你还需要 spark Cassandra 连接器 2.3 你好拉斯。我已经在使用 Cassandra 连接器 2.3。我将尝试将所有 spark 库切换到 2.3。谢谢 谢谢,这有助于解决它。依赖雷区比平时更难:)

以上是关于Spark Cassandra 连接器基础简单程序获取火花记录错误的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra Spark 写入缓慢

cassandra java驱动程序连接抛出noHostAvailableException

无法使用 Spark cassandra 连接器 1.5.0 连接 Cassandra 3.0

Spark cassandra 连接器 + 加入超时

如何用Cassandra连接火花

Spark Cassandra 连接器找不到 java.time.LocalDate