2016-01-26 5 views
0

у меня есть: - Hadoop - Искра JobServer - SQL DatabaseСпарк JobServer JDBC-ClassNotFound ошибка

Я создал файл, чтобы получить доступ к своей базе данных SQL из локального экземпляра Спарк JobServer. Для этого мне сначала нужно загрузить мой JDBC-драйвер с помощью этой команды: Class.forName("com.mysql.jdbc.Driver");. Однако, когда я пытаюсь выполнить файл на Спарк JobServer, я получаю ошибку ClassNotFound:

"message": "com.mysql.jdbc.Driver", 
"errorClass": "java.lang.ClassNotFoundException", 

Я прочитал, что для того, чтобы загрузить драйвер JDBC, вы должны изменить некоторые конфигурации либо в application.conf файл Spark JobServer или файл server_start.sh. Я сделал это следующим образом. В server_start.sh я изменил CMD значения, которое отправляется с командой в качестве искровых представить:

cmd='$SPARK_HOME/bin/spark-submit --class $MAIN --driver-memory $JOBSERVER_MEMORY 
    --conf "spark.executor.extraJavaOptions=$LOGGING_OPTS spark.executor.extraClassPath = hdfs://quickstart.cloudera:8020/user/cloudera/mysql-connector-java-5.1.38-bin.jar" 
    --driver-java-options "$GC_OPTS $JAVA_OPTS $LOGGING_OPTS $CONFIG_OVERRIDES" 
    --driver-class-path "hdfs://quickstart.cloudera:8020/user/cloudera/mysql-connector-java-5.1.38-bin.jar" 
    --jars "hdfs://quickstart.cloudera:8020/user/cloudera/mysql-connector-java-5.1.38-bin.jar" 
    [email protected] $appdir/spark-job-server.jar $conffile' 

Я также изменил несколько строк в application.conf файл Спарк JobServer, который используется при запуске экземпляра:

# JDBC driver, full classpath 
jdbc-driver = com.mysql.jdbc.Driver 

# dependent-jar-uris = ["hdfs://quickstart.cloudera:8020/user/cloudera/mysql-connector-java-5.1.38-bin.jar"] 

Но ошибка, которую класс JDBC не может найти, все еще возвращается.

Уже проверены на следующие ошибки:

Error1: В случае кто-то думает, что я просто путь неверный файл (который вполне может быть случай, насколько я себя знаю), я проверил на правильный файл на HDFS с hadoop fs -ls hdfs://quickstart.cloudera:8020/user/cloudera/ и файлом был там:

-rw-r--r-- 1 cloudera cloudera  983914 2016-01-26 02:23 hdfs://quickstart.cloudera:8020/user/cloudera/mysql-connector-java-5.1.38-bin.jar 

ERROR2: у меня есть необходимая зависимость загруженной в моем файле build.sbt: libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.+" и команда импорта в моем файле-лестнице import java.sql._.

Как я могу решить эту ошибку ClassNotFound? Есть ли хорошие альтернативы JDBC для подключения к SQL?

ответ

1

У нас есть что-то подобное в local.conf

# JDBC driver, full classpath 
    jdbc-driver = org.postgresql.Driver 

    # Directory where default H2 driver stores its data. Only needed for H2. 
    rootdir = "/var/spark-jobserver/sqldao/data" 

    jdbc { 
    url = "jdbc:postgresql://dbserver/spark_jobserver" 
    user = "****" 
    password = "****" 
    } 

    dbcp { 
    maxactive = 20 
    maxidle = 10 
    initialsize = 10 
    } 

И в сценарии запуска у меня есть

EXTRA_JARS =»/opt/spark-jobserver/lib/* "

CLASSPATH =" $ appdir: $ appdir/spark-job-server.jar: $ EXTRA_JARS: $ (dse spark-classpath) "

И все зависимые файлы, которые используются Спарк Jobserver ставится в/Opt/искрового jobserver/Lib

Я не использовал HDFS, чтобы загрузить банку для jobserver.

Но если вам нужен драйвер mysql для загрузки на узлах искровых рабочих, то вы должны сделать это через depend-jar-uris. Думаю, именно это вы делаете сейчас.

+0

Спасибо большое! Кстати, я только что узнал из поддержки JobServer, что файлы HDFS не поддерживаются как зависимые-jar-uris, поэтому я думаю, что это была проблема. В заключение! –

0

Я упаковал проект, используя сборку sbt, и он, наконец, работает, и я счастлив.

Но на самом деле он не работает с файлами HDFS в вашем зависимом jar-uri. Поэтому не используйте ссылки HDFS как ваш зависимый jar-uris.

Кроме того, прочитайте эту ссылку в случае, если вам интересно: https://github.com/spark-jobserver/spark-jobserver/issues/372

Смежные вопросы