2016-01-13 90 views
5

發現JDBC沒有合適的驅動程序,我使用在星火

df.write.mode("append").jdbc("jdbc:mysql://ip:port/database", "table_name", properties) 

插入到MySQL中的表。我的代碼中添加了Class.forName("com.mysql.jdbc.Driver")

當我提交我的星火申請:

spark-submit --class MY_MAIN_CLASS 
    --master yarn-client 
    --jars /path/to/mysql-connector-java-5.0.8-bin.jar 
    --driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar 
    MY_APPLICATION.jar 

這種紗線客戶機模式對我的作品。

但是當我使用的紗線集羣模式:

spark-submit --class MY_MAIN_CLASS 
    --master yarn-cluster 
    --jars /path/to/mysql-connector-java-5.0.8-bin.jar 
    --driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar 
    MY_APPLICATION.jar 

它好好嘗試的工作。我也嘗試設置「--conf」:

spark-submit --class MY_MAIN_CLASS 
    --master yarn-cluster 
    --jars /path/to/mysql-connector-java-5.0.8-bin.jar 
    --driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar 
    --conf spark.executor.extraClassPath=/path/to/mysql-connector-java-5.0.8-bin.jar 
    MY_APPLICATION.jar 

但仍然得到「沒有找到適合jdbc的驅動程序」錯誤。

回答

2

有3級可能的解決方案,

  1. 您可能要裝配你與你的生成管理(Maven的,SBT),因此你不會需要添加依賴條件在​​CLI應用程序。
  2. 您可以使用您的​​CLI以下選項:

    --jars $(echo ./lib/*.jar | tr ' ' ',') 
    

    說明:假設你有一個lib目錄中所有的罐子在你的項目的根,這將讀取所有的庫和添加他們到應用程序提交。

  3. 您也可以嘗試配置這2個變量:在SPARK_HOME/conf/spark-default.conf文件spark.driver.extraClassPathspark.executor.extraClassPath,並指定這些變量的jar文件的路徑值。確保工作節點上存在相同的路徑。

+0

我將mysql-connector-java-5.1.38-bin.jar添加到我的jar中,現在我不包含它在我的spark-submit cli中。通過這樣做,紗線客戶仍然可以工作,但紗線集羣不能。 –

+2

您還可以嘗試在「SPARK_HOME/conf/spark-default.conf」文件中配置這兩個變量「spark.driver.extraClassPath」和「spark.executor.extraClassPath」,並指定這些變量的值作爲jar文件。確保工作節點上存在相同的路徑。 – Sumit

+0

設置「spark.driver.extraClassPath」適用於我,謝謝。 –

0

我試過這裏顯示的建議,這對我沒有用(用mysql)。在通過DriverManager代碼進行調試時,我意識到我需要註冊我的驅動程序,因爲這不會通過「spark-submit」自動發生。因此,我添加了

Driver driver = new Driver(); 

該構造函數向DriverManager註冊驅動程序,該驅動程序爲我解決了SQLException問題。