Scala=を使用して、Sparkアプリケーションをローカルで作成して実行しています。
私のbuild.sbt:
name : "SparkDemo"
version : "1.0"
scalaVersion : "2.10.4"
libraryDependencies += "org.Apache.spark" %% "spark-core" % "1.2.0" exclude("org.Apache.hadoop", "hadoop-client")
libraryDependencies += "org.Apache.spark" % "spark-sql_2.10" % "1.2.0"
libraryDependencies += "org.Apache.hadoop" % "hadoop-common" % "2.6.0" excludeAll(
ExclusionRule(organization = "org.Eclipse.jetty"))
libraryDependencies += "org.Apache.hadoop" % "hadoop-mapreduce-client-core" % "2.6.0"
libraryDependencies += "org.Apache.hbase" % "hbase-client" % "0.98.4-hadoop2"
libraryDependencies += "org.Apache.hbase" % "hbase-server" % "0.98.4-hadoop2"
libraryDependencies += "org.Apache.hbase" % "hbase-common" % "0.98.4-hadoop2"
mainClass in Compile := Some("demo.TruckEvents")
実行時に例外が発生します:
呼び出し中のスレッド「メイン」Java.lang.ExceptionInInitializerErrorの例外...原因:Java.lang.SecurityException:クラス「javax.servlet.FilterRegistration」の署名者情報が、同じパッケージ内の他のクラスの署名者情報と一致しません
例外はここでトリガーされます:
val sc = new SparkContext("local", "HBaseTest")
IntelliJ Scala/SBTプラグインを使用しています。
私は他の人にもこの問題があることを見てきました 提案ソリューション 。しかし、これはMavenビルドです...ここで私のsbtは間違っていますか?または、この問題を解決する方法はありますか?
同様の質問への私の答えを参照してください here 。クラスの競合は、HBaseがorg.mortbay.jetty
に依存し、Sparkがorg.Eclipse.jetty
に依存するために発生します。Hsomeからorg.mortbay.jetty
依存関係を除外することで問題を解決できました。
hadoop-common
を使用している場合は、javax.servlet
からhadoop-common
を除外する必要があります。次のようにsbt依存関係が設定された、動作するHBase/Sparkセットアップがあります。
val clouderaVersion = "cdh5.2.0"
val hadoopVersion = s"2.5.0-$clouderaVersion"
val hbaseVersion = s"0.98.6-$clouderaVersion"
val sparkVersion = s"1.1.0-$clouderaVersion"
val hadoopCommon = "org.Apache.hadoop" % "hadoop-common" % hadoopVersion % "provided" excludeAll ExclusionRule(organization = "javax.servlet")
val hbaseCommon = "org.Apache.hbase" % "hbase-common" % hbaseVersion % "provided"
val hbaseClient = "org.Apache.hbase" % "hbase-client" % hbaseVersion % "provided"
val hbaseProtocol = "org.Apache.hbase" % "hbase-protocol" % hbaseVersion % "provided"
val hbaseHadoop2Compat = "org.Apache.hbase" % "hbase-hadoop2-compat" % hbaseVersion % "provided"
val hbaseServer = "org.Apache.hbase" % "hbase-server" % hbaseVersion % "provided" excludeAll ExclusionRule(organization = "org.mortbay.jetty")
val sparkCore = "org.Apache.spark" %% "spark-core" % sparkVersion % "provided"
val sparkStreaming = "org.Apache.spark" %% "spark-streaming" % sparkVersion % "provided"
val sparkStreamingKafka = "org.Apache.spark" %% "spark-streaming-kafka" % sparkVersion exclude("org.Apache.spark", "spark-streaming_2.10")
IntelliJ IDEAを使用している場合、これを試してください:
この問題を解決するはずです。
このメソッドは http://wpcertification.blogspot.ru/2016/01/spark-error-class-javaxservletfilterreg.html から来ました
SBTを使用すると、3.0にFilterRegistrationクラスが存在し、JETTYまたはJava 8このJAR 2.5を使用すると、依存関係として自動的に追加されます。
修正:Servlet-api-2.5 JARが混乱していたので、依存関係にservlet-api-3.0 jarを追加してこの問題を解決しました。
Intellij Ideaで発生している場合は、プロジェクト設定に移動し、モジュール内のjarを見つけて削除する必要があります。次に、シェルを介してsbtでコードを実行します。 jarファイル自体を取得してから、intellijに戻り、intellijを介してコードを再実行します。それはどういうわけか私のために動作し、エラーを修正します。それがもう現れないので、私は問題が何であったかわかりません。
ああ、私もjarファイルを削除し、「javax.servlet:javax.servlet-api:3.1.0」をmaven経由で手動で追加したところ、エラーが消えたことがわかります。
私にとっては次のように動作します:
libraryDependencies ++= Seq(
"org.Apache.spark" %% "spark-core" % sparkVersion.value % "provided",
"org.Apache.spark" %% "spark-sql" % sparkVersion.value % "provided",
....................................................................
).map(_.excludeAll(ExclusionRule(organization = "javax.servlet")))
Intellij内で実行している場合、2つのアクティブなモジュール(プロジェクト用とsbt用)がある場合は、プロジェクト設定を確認してください。
既存のプロジェクトのインポート中に問題が発生した可能性があります。
hadoopとhbaseに依存せずに簡単なプログラムを実行してみてください
libraryDependencies += "org.Apache.hadoop" % "hadoop-common" % "2.6.0" excludeAll(ExclusionRule(organization = "org.Eclipse.jetty"))
libraryDependencies += "org.Apache.hadoop" % "hadoop-mapreduce-client-core" % "2.6.0"
libraryDependencies += "org.Apache.hbase" % "hbase-client" % "0.98.4-hadoop2"
libraryDependencies += "org.Apache.hbase" % "hbase-server" % "0.98.4-hadoop2"
libraryDependencies += "org.Apache.hbase" % "hbase-common" % "0.98.4-hadoop2"
依存関係の不一致があるはずです。また、コンパイル中と実行中に同じバージョンのjarが存在することを確認してください。
また、spark Shellを再現するためのシェルでコードを実行することは可能ですか?.