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

Другие вопросы по тегам