【问题标题】:Spark - Adding JDBC Driver JAR to Google DataprocSpark - 将 JDBC 驱动程序 JAR 添加到 Google Dataproc
【发布时间】:2016-01-02 16:23:14
【问题描述】:

我正在尝试通过 JDBC 编写:

df.write.jdbc("jdbc:postgresql://123.123.123.123:5432/myDatabase", "myTable", props)

Spark docs 解释说,如果在客户端模式(Dataproc 运行的模式)下运行,配置选项spark.driver.extraClassPath 不能用于添加 JDBC 驱动程序 JAR,因为 JVM 已经启动。

我尝试在 Dataproc 的提交命令中添加 JAR 路径:

gcloud beta dataproc jobs submit spark ... 
     --jars file:///home/bryan/org.postgresql.postgresql-9.4-1203-jdbc41.jar

我还添加了加载驱动的命令:

  Class.forName("org.postgresql.Driver")

但我仍然收到错误:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://123.123.123.123:5432/myDatabase 

【问题讨论】:

    标签: apache-spark jdbc google-cloud-platform apache-spark-sql google-cloud-dataproc


    【解决方案1】:

    根据我的经验,将driver 添加到属性通常可以解决问题:

    props.put("driver", "org.postgresql.Driver")
    db.write.jdbc(url, table, props)
    

    【讨论】:

    • 效果很好。应该添加到文档中。 (注意:我的问题中的代码没有改变,因此可能有必要也可能没有必要)
    • 有趣的是它并不总是必要的,但我无法弄清楚究竟是什么有所作为。
    • 复杂性对任何系统都适用;)
    【解决方案2】:

    您可能想尝试在命令参数的最后添加--driver-class-path

    gcloud beta dataproc jobs submit spark ... 
        --jars file:///home/bryan/org.postgresql.postgresql-9.4-1203-jdbc41.jar \
        --driver-class-path /home/bryan/org.postgresql.postgresql-9.4-1203-jdbc41.jar
    

    如果您在作业之前将 jarfile 暂存到集群上,另一种方法是将您需要的 jarfile 转储到 /usr/lib/hadoop/lib/,它应该自动成为 Hadoop 和 Spark 作业的驱动程序类路径的一部分。

    【讨论】:

    • 将驱动程序类路径放在最后没有用。
    【解决方案3】:

    通过 Dataproc 提交 Spark 作业时,您可以使用 --properties 参数将 jar(来自 --jars 参数)添加到 Spark Driver 类路径:

    $ gcloud dataproc jobs submit spark ... \
        --jars=gs://<BUCKET>/<DIRECTORIES>/<JAR_NAME> \
        --properties=spark.driver.extraClassPath=<JAR_NAME>
    

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 2015-12-21
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 2015-06-15
      • 2018-04-05
      相关资源
      最近更新 更多