私は持っています: - 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クラスが見つからないというエラーが返ってきます。
次のエラーについてはすでに確認済みです。
エラー 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.+"
インポート コマンドが scala-file にありますimport java.sql._
。
この ClassNotFound エラーを解決するにはどうすればよいですか? SQL に接続するための JDBC に代わる良い方法はありますか?