当 运行 来自 jar 时,Spark 作业无法连接到 cassandra
Spark job can't connect to cassandra when ran from a jar
我有将数据写入 Cassandra 的 Spark 作业(Cassandra 在 GCP 上)。当我 运行 来自 IntelliJIDEA(我的 IDE)时,它工作得很好。数据完美发送并写入Cassandra。但是,当我将我的项目打包到一个 fat 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
我想知道为什么会这样,我该如何解决?
问题是除了这两件事之外,您还需要更多的 jar - 完整的 Java 驱动程序及其依赖项。您可以通过以下方式解决该问题:
您需要确保使用 Maven 或 SBT 或其他任何方式将这些工件打包到生成的 jar(so-called“fat jar”或“程序集”)中
你可以用 --packages
指定 Maven 坐标 com.datastax.spark:spark-cassandra-connector_2.12:3.0.0-beta
像这样 --packages com.datastax.spark:spark-cassandra-connector_2.12:3.0.0-beta
您可以将 spark-cassandra-connector-assembly 工件下载到您正在执行 spark-submit
的节点,然后使用该文件名 --jars
有关详细信息,请参阅 documentation for Spark Cassandra Connector。
我有将数据写入 Cassandra 的 Spark 作业(Cassandra 在 GCP 上)。当我 运行 来自 IntelliJIDEA(我的 IDE)时,它工作得很好。数据完美发送并写入Cassandra。但是,当我将我的项目打包到一个 fat 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
我想知道为什么会这样,我该如何解决?
问题是除了这两件事之外,您还需要更多的 jar - 完整的 Java 驱动程序及其依赖项。您可以通过以下方式解决该问题:
您需要确保使用 Maven 或 SBT 或其他任何方式将这些工件打包到生成的 jar(so-called“fat jar”或“程序集”)中
你可以用
--packages
指定 Maven 坐标com.datastax.spark:spark-cassandra-connector_2.12:3.0.0-beta
像这样--packages com.datastax.spark:spark-cassandra-connector_2.12:3.0.0-beta
您可以将 spark-cassandra-connector-assembly 工件下载到您正在执行
spark-submit
的节点,然后使用该文件名--jars
有关详细信息,请参阅 documentation for Spark Cassandra Connector。