2016-01-13 8 views
5

にJDBCが見つかりません最適なドライバ私は、MySQLのテーブルに挿入するスパーク

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

を使用しています。

また、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 

この糸クライアントモードは私のために動作します。

しかし、私は糸クラスタモードを使用する場合:それは仕事をdoens't

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 

を。

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が見つかりませ最適なドライバ」を取得しない:私はまた、「--conf」に設定しようとしました。

答えて

2

3つの可能な解決策、

  1. は、このように、あなたの​​CLIでの依存性を追加する必要はありませんよあなたがアセンブリにビルドマネージャー(Mavenの、SBT)とのあなたのアプリケーションをお勧めしますがあります。
  2. あなたの​​CLIで次のオプションを使用することができます。

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

    説明:をあなたのプロジェクトのルートにlibディレクトリ内のすべてのあなたのjarファイルを持っていると仮定すると、これはすべてのライブラリを読み込んで追加されますそれらをアプリケーションに提出してください。 SPARK_HOME/conf/spark-default.confファイルにspark.driver.extraClassPathspark.executor.extraClassPathとjarファイルのパスとしてこれらの変数の値を指定します。

  3. またこれらの2つの変数を設定しようとすることができます。ワーカーノードに同じパスが存在することを確認します。

+0

私はmysql-connector-java-5.1.38-bin.jarを自分のjarファイルに追加しましたが、spark-submit cliには含まれていません。これを行うことによって、糸クライアントはまだ動作しますが、糸クラスターは動作しません。 –

+2

これらの2つの変数 "spark.driver.extraClassPath"と "spark.executor.extraClassPath"を "SPARK_HOME/conf/spark-default.conf"ファイルに設定し、これらの変数の値をjarファイル。ワーカーノードに同じパスが存在することを確認します。 – Sumit

+0

設定 "spark.driver.extraClassPath"は私のために、ありがとう。 –

0

ここに示されている(mysqlを使って)私にとってはうまくいかなかった提案を試してみました。 DriverManagerのコードを使ってデバッグしているときに、私はドライバを登録する必要があることに気付きました。これは、 "spark-submit"で自動的には発生しなかったからです。したがって私は追加しました

Driver driver = new Driver(); 

コンストラクタは私にSQLExceptionの問題を解決したDriverManagerでドライバを登録します。