2016-12-14 9 views
0

私は内部的にmysqlテーブルにクエリを実行し、s3にデータを書き込み、ローカルで自分のコードをテストしたところ、完全に正常に動作します。しかし、私はそれがエラーの下に投げ、それをクラスターに提出するとき:以下spark-submitコマンド(mysqlコネクタを含む)

Exception in thread "main" java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(DriverManager.java:315) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:54) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:54) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.createConnectionFactory(JdbcUtils.scala:53) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:123) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.(JDBCRelation.scala:117) at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:53) at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:330) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:122) at QuaterlyAudit$.main(QuaterlyAudit.scala:51) at QuaterlyAudit.main(QuaterlyAudit.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:736) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

私sparksubmitコマンドです:私は、SBTを使用しています

nohup spark-submit --class QuaterlyAudit --master yarn-client --num-executors 8 
--driver-memory 16g --executor-memory 20g --executor-cores 10 /mypath/campaign.jar & 

、私は以下、SBTアセンブリ内のMySQLコネクタを含め、私のビルドです。 SBTファイル:

nohup spark-submit --driver-class-path /mypath/mysql-connector-java-5.1.37.jar 
--class QuaterlyAudit --master yarn-client --num-executors 8 --driver-memory 16g 
--executor-memory 20g --executor-cores 10 /mypath/campaign.jar & 

name := "mobilewalla" 

version := "1.0" 

scalaVersion := "2.11.8" 

libraryDependencies ++= Seq("org.apache.spark" %% "spark-core" % "2.0.0" % "provided", 
    "org.apache.spark" %% "spark-sql" % "2.0.0" % "provided", 
    "org.apache.hadoop" % "hadoop-aws" % "2.6.0" intransitive(), 
    "mysql" % "mysql-connector-java" % "5.1.37") 

assemblyMergeStrategy in assembly := { 
    case PathList("META-INF", [email protected]_*) => 
    xs.map(_.toLowerCase) match { 
     case ("manifest.mf" :: Nil) | 
     ("index.list" :: Nil) | 
     ("dependencies" :: Nil) | 
     ("license" :: Nil) | 
     ("notice" :: Nil) => MergeStrategy.discard 
    case _ => MergeStrategy.first // was 'discard' previousely 
} 
    case "reference.conf" => MergeStrategy.concat 
    case _ => MergeStrategy.first 
} 
assemblyJarName in assembly := "campaign.jar" 

私もしてみました

まだ運がない、何が私はここで行方不明です。

答えて

0

SparkがJDBC JARを取得できないことは明らかです。修正可能な回避策はほとんどありません。間違いなく多くの人々がこの問題に直面した。 Jarはドライバとエグゼキュータにアップロードされていないためです。あなたのビルドマネージャ(Mavenの、SBT)とあなたのアプリケーションので、あなたの​​CLIでの依存性を追加する必要はありませんよアセンブリする場合があります

  1. --jars $(echo ./lib/*.jar | tr ' ' ',')
  2. またこれらの2つの変数を設定しようとすることができます:
  3. あなた​​CLIで次のオプションを使用することができますSPARK_HOME/confに/火花は、default.confファイル内spark.driver.extraClassPathspark.executor.extraClassPathをし、これらの変数の値を指定しますjarファイルのパスとして指定します。ワーカーノードに同じパスが存在することを確認してください。
+0

は、それは私が 'nohupを火花送信--class QuaterlyAuditを使用' sqlContext.read'コマンドに '.OPTION( "ドライバ"、 "はcom.mysql.jdbc.Driver")'の添加により固定しました - マスター糸クライアント--num-executor 8 --driver-memory 16g --executor-core 10 /mypath/campaign.jar&command and it worked – toofrellik

+0

ビルド中にjarを追加しましたビルドマネージャーのみを使用します。それはまた、ポイント1ですでに言及した方法かもしれない –

関連する問題