0

我有: - Hadoop - Spark JobServer - SQL 数据库

我创建了一个文件来从 Spark JobServer 的本地实例访问我的 SQL 数据库。为此,我首先必须使用以下命令加载我的 JDBC 驱动程序:Class.forName("com.mysql.jdbc.Driver");. 但是,当我尝试在 Spark JobServer 上执行该文件时,我收到一个 classNotFound 错误:

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

我已经读过,为了加载 JDBC 驱动程序,您必须更改 Spark JobServer 的 application.conf 文件或其 server_start.sh 文件中的一些配置。我这样做如下。在 server_start.sh 中,我更改了作为 spark-submit 命令发送的 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"
  $@ $appdir/spark-job-server.jar $conffile'

我还更改了启动实例时使用的 Spark JobServer 的 application.conf 文件的一些行:

# 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.+"在我的 scala-file 中加载了 import 命令import java.sql._

如何解决这个 ClassNotFound 错误?是否有任何替代 JDBC 连接 SQL 的好方法?

4

2 回答 2

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)"

Spark Jobserver 使用的所有依赖文件都放在 /opt/spark-jobserver/lib

我没有使用 HDFS 为作业服务器加载 jar。

但是,如果您需要在 spark 工作节点上加载 mysql 驱动程序,那么您应该通过dependent-jar-uris 来完成。我认为这就是你现在正在做的事情。

于 2016-01-26T16:16:29.117 回答
0

我已经使用 sbt 程序集打包了这个项目,它终于可以工作了,我很高兴。

但实际上在您的dependent-jar-uri 中有 HDFS 文件是行不通的。所以不要使用 HDFS 链接作为您的依赖 jar-uris。

另外,如果您好奇,请阅读此链接:https ://github.com/spark-jobserver/spark-jobserver/issues/372

于 2016-01-26T15:10:54.557 回答