【问题标题】:Spark job can't connect to cassandra when ran from a jar从 jar 运行时,Spark 作业无法连接到 cassandra
【发布时间】:2021-01-04 17:15:52
【问题描述】:

我有将数据写入 Cassandra 的 spark 作业(Cassandra 在 GCP 上)。当我从 IntelliJIDEA(我的 IDE)运行它时,它工作得非常好。数据完美地发送并写入 Cassandra。但是,当我将项目打包到一个胖 jar 中并运行它时,这会失败。

这是我如何运行它的示例。

spark-submit --class com.testing.Job --master local out/artifacts/SparkJob_jar/SparkJob.jar 1 0

但是,这对我来说失败并给我以下错误

Caused by: java.io.IOException: Failed to open native connection to Cassandra at {X.X.X:9042} :: 'com.datastax.oss.driver.api.core.config.ProgrammaticDriverConfigLoaderBuilder com.datastax.oss.driver.api.core.config.DriverConfigLoader.programmaticBuilder()'


Caused by: java.lang.NoSuchMethodError: 'com.datastax.oss.driver.api.core.config.ProgrammaticDriverConfigLoaderBuilder com.datastax.oss.driver.api.core.config.DriverConfigLoader.programmaticBuilder()'

我的工件文件确实包含 spark-Cassandra 文件

spark-cassandra-connector-driver_2.12-3.0.0-beta.jar
spark-cassandra-connector_2.12-3.0.0-beta.jar

我想知道为什么会发生这种情况以及如何解决?

【问题讨论】:

    标签: apache-spark cassandra jar spark-cassandra-connector


    【解决方案1】:

    问题在于,除了这两件事之外,您还需要更多的 jars - 完整的 Java 驱动程序及其依赖项。您可以通过以下方式解决此问题:

    1. 您需要确保使用 Maven 或 SBT 或其他任何方式将这些工件打包到生成的 jar(所谓的“胖 jar”或“程序集”)中

    2. 你可以指定maven坐标com.datastax.spark:spark-cassandra-connector_2.12:3.0.0-beta--packages像这样--packages com.datastax.spark:spark-cassandra-connector_2.12:3.0.0-beta

    3. 您可以将spark-cassandra-connector-assembly 工件下载到您正在执行spark-submit 的节点,然后将该文件名与--jars 一起使用

    有关详细信息,请参阅documentation for Spark Cassandra Connector

    【讨论】:

    • 太好了,我尝试了 2 和 3,效果很好。我以为我最初是在尝试#1(因为我做了一个胖罐子并使用了 sbt)
    • 我通常通过 unzip -l jar-file|grep class-name 来检查 fat jar - 我不是 sbt 专家,不能说为什么它没有被打包
    猜你喜欢
    • 2016-06-03
    • 2016-04-25
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2023-03-14
    相关资源
    最近更新 更多