2016-01-13 18 views
5

UżywamNie znaleziono odpowiedni sterownik JDBC w Spark

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

wstawić do tabeli w MySQL.

Dodałem również kod Class.forName("com.mysql.jdbc.Driver").

Kiedy złożyć mój wniosek 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 

Ten tryb przędzy klient działa na mnie.

Ale kiedy używać trybu przędzy klastra:

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 

doens't pracy. Próbowałem również ustawienie "--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 

, ale nadal pojawia się błąd "Nie znaleziono odpowiedniego sterownika dla jdbc".

Odpowiedz

2

Jest 3 możliwe rozwiązania,

  1. Możecie chcą montaż you aplikacja z kierownikiem budowy (Maven, SBT), więc nie będziesz musiał dodać dependecies w swoim spark-submit CLI.
  2. Można użyć następującą opcję w swoim spark-submit CLI:

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

    wyjaśnienie: Przypuśćmy, że masz wszystkie słoiki w katalogu lib w katalogu głównym projektu będzie to czytać wszystkie biblioteki i dodać je do zgłoszenia wniosku.

  3. Można także spróbować skonfigurować te 2 zmienne: spark.driver.extraClassPath i spark.executor.extraClassPath w SPARK_HOME/conf/spark-default.conf pliku i określenie wartości tych zmiennych jak ścieżki pliku jar. Upewnij się, że ta sama ścieżka istnieje w węzłach roboczych.

+0

Dodałem plik mysql-connector-java-5.1.38-bin.jar do mojego słoika, a teraz nie umieszczam go w moim pliku cli. Robiąc to, klient nadal działa, ale klaster przędzy nie. –

+2

możesz także spróbować skonfigurować te 2 zmienne "spark.driver.extraClassPath" i "spark.executor.extraClassPath" w pliku "SPARK_HOME/conf/spark-default.conf" i określić wartość tych zmiennych jako ścieżkę plik jar. Upewnij się, że ta sama ścieżka istnieje w węzłach roboczych. – Sumit

+0

Ustawienie "spark.driver.extraClassPath" działa dla mnie, dziękuję. –

0

Próbowałem sugestie tutaj pokazane, które nie działa dla mnie (z mysql). Podczas debugowania za pomocą kodu DriverManager zdałem sobie sprawę, że muszę zarejestrować sterownik, ponieważ nie dzieje się to automatycznie z "zrzucaniem iskier". Dlatego dodaje

Driver driver = new Driver(); 

Konstruktor rejestruje sterownik z DriverManager, który rozwiązał problem SQLException dla mnie.

Powiązane problemy