Spark - 将JDBC驱动程序JAR添加到Google Dataproc

时间:2015-10-05 21:37:08

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

我正在尝试通过JDBC编写:

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

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

我尝试在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 

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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

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

答案 2 :(得分:0)

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

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