Spark JobServer JDBC-ClassNotFound ошибка
У меня есть: - Hadoop - Spark JobServer - База данных SQL
Я создал файл для доступа к моей базе данных SQL из локального экземпляра Spark JobServer. Чтобы сделать это, я сначала должен загрузить свой JDBC-драйвер с помощью этой команды: Class.forName("com.mysql.jdbc.Driver");
, Однако, когда я пытаюсь выполнить файл в Spark JobServer, я получаю ошибку classNotFound:
"message": "com.mysql.jdbc.Driver",
"errorClass": "java.lang.ClassNotFoundException",
Я прочитал, что для загрузки драйвера JDBC необходимо изменить некоторые конфигурации либо в файле application.conf Spark JobServer, либо в его файле server_start.sh. Я сделал это следующим образом. В server_start.sh я изменил значение cmd, которое отправляется с помощью команды spark-submit:
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"
$@ $appdir/spark-job-server.jar $conffile'
Я также изменил некоторые строки в файле application.conf Spark 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 не может быть найден, все еще возвращается.
Уже проверены на наличие следующих ошибок:
ОШИБКА 1: В случае, если кто-то думает, что у меня просто неправильный путь к файлу (что может быть так, насколько я знаю сам), я проверил правильность файла в 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
ОШИБКА 2: у меня есть необходимые зависимости загружены в мой файл build.sbt: libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.+"
и команда импорта в моем скала-файле import java.sql._
,
Как я могу решить эту ошибку ClassNotFound? Есть ли хорошие альтернативы JDBC для подключения к SQL?
2 ответа
У нас есть что-то вроде этого в 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="/ опт / искровой jobserver / Библиотека / *"
CLASSPATH = "$ appdir: $ appdir / spark-job-server.jar: $ EXTRA_JARS: $ (dse spark-classpath)"
Все зависимые файлы, используемые Spark Jobserver, помещаются в / opt / spark-jobserver / lib
Я не использовал HDFS для загрузки JAR для сервера заданий.
Но если вам нужен драйвер mysql для загрузки на рабочих узлах spark, то вам следует сделать это через зависимый-jar-uris. Я думаю, это то, что вы делаете сейчас.
Я упаковал проект, используя сборку sbt, и он наконец работает, и я счастлив.
Но на самом деле не получается иметь файлы HDFS в вашем зависимом-jar-uri. Поэтому не используйте HDFS-ссылки в качестве зависимого jar-uris.
Кроме того, прочитайте эту ссылку, если вам интересно: https://github.com/spark-jobserver/spark-jobserver/issues/372