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クラスが見つからないというエラーが返ってきます。

次のエラーについてはすでに確認済みです。

エラー 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 に代わる良い方法はありますか?

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 をロードしたことはありません。

ただし、mysql ドライバーを Spark ワーカー ノードにロードする必要がある場合は、dependent-jar-uris を介して実行する必要があります。それがあなたが今していることだと思います。

于 2016-01-26T16:16:29.117 に答える
0

sbt アセンブリを使用してプロジェクトをパッケージ化しましたが、最終的には機能し、満足しています。

しかし、実際には、dependent-jar-uri に HDFS ファイルを含めることはできません。したがって、HDFS リンクを依存 jar URI として使用しないでください。

また、興味がある場合は、このリンクをお読みください: https://github.com/spark-jobserver/spark-jobserver/issues/372

于 2016-01-26T15:10:54.557 に答える