2016-01-13 14 views
5

Sto usandoNessun driver adatto trovato per JDBC in Spark

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

ad inserire in una tabella in MySQL.

Inoltre, ho aggiunto Class.forName("com.mysql.jdbc.Driver") nel mio codice.

Quando presento la mia candidatura Spark:

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 

Questa modalità filo-client funziona per me.

Ma quando io uso la modalità filo-cluster:

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 

E doens't lavoro. Ho anche provato a impostare "--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 

ma ancora ottenere l'errore "Nessun driver adatto trovato per jdbc".

risposta

2

Ci sono 3 possibili soluzioni,

  1. Si potrebbe desiderare di assemblaggio voi l'applicazione con il vostro responsabile build (Maven, SBT), quindi, non è necessario aggiungere i dependecies nelle spark-submit cli.
  2. È possibile utilizzare la seguente opzione nelle spark-submit cli:

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

    Spiegazione: Supponendo che avete tutti i vostri vasetti in una directory lib nella directory principale del progetto, questo leggerà tutte le librerie e aggiungere loro alla presentazione della domanda.

  3. Si può anche provare a configurare queste 2 variabili: spark.driver.extraClassPath e spark.executor.extraClassPath in SPARK_HOME/conf/spark-default.conf file e specificare il valore di queste variabili come il percorso del file jar. Assicurarsi che lo stesso percorso esista sui nodi worker.

+0

Ho aggiunto mysql-connector-java-5.1.38-bin.jar nel mio barattolo e ora non lo includo nel mio cli-spark-submit. Facendo questo, il filato-cliente funziona ancora, ma il filato non lo fa. –

+2

puoi anche provare a configurare queste 2 variabili "spark.driver.extraClassPath" e "spark.executor.extraClassPath" nel file "SPARK_HOME/conf/spark-default.conf" e specificare il valore di queste variabili come il percorso del file jar. Assicurarsi che lo stesso percorso esista sui nodi worker. – Sumit

+0

L'impostazione "spark.driver.extraClassPath" funziona per me, grazie. –

0

Ho provato i suggerimenti mostrati qui che non ha funzionato per me (con mysql). Durante il debugging attraverso il codice DriverManager, mi sono reso conto che avevo bisogno di registrare il mio driver poiché questo non avveniva automaticamente con "spark-submit". Pertanto aggiunto

Driver driver = new Driver(); 

Il costruttore registra il pilota con il DriverManager, che ha risolto il problema SQLException per me.

Problemi correlati