3

我想通過JDBC寫:星火 - 添加JDBC驅動程序JAR到谷歌Dataproc

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

Spark docs解釋說,配置選項spark.driver.extraClassPath不能用來添加JDBC驅動程序的JAR文件,如果在客戶端模式下運行(這是Dataproc運行的模式),因爲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 

回答

3

根據我的經驗,將driver添加到屬性通常可以解決問題:

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

工程很好。應該添加到文檔。 (注:我在我的問題中的代碼沒有改變,所以可能或可能不需要) – BAR

+0

有趣的是,它並不總是必要的,但我無法弄清楚究竟有什麼區別。 – zero323

+0

複雜性會對任何系統執行此操作;) – BAR

3

你可能想嘗試加入​​到您的命令參數的盡頭:

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作業的驅動程序類路徑的一部分。

+0

將驅動程序類路徑放在最後不起作用。 – BAR

相關問題