web-dev-qa-db-ja.com

Spark application throws javax.servlet.FilterRegistration

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は間違っていますか?または、この問題を解決する方法はありますか?

20
Marco

同様の質問への私の答えを参照してください 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")
37

IntelliJ IDEAを使用している場合、これを試してください:

  1. プロジェクトのルートフォルダを右クリックして、モジュール設定を開くを選択します
  2. 新しいウィンドウで、左側のナビゲーション列でModulesを選択します
  3. 右端の列で、Dependenciesタブを選択し、Maven:javax.servlet:servlet-api:2.5
  4. 最後に、Alt + Downキーを押してこのアイテムを一番下に移動します。

この問題を解決するはずです。

このメソッドは http://wpcertification.blogspot.ru/2016/01/spark-error-class-javaxservletfilterreg.html から来ました

4
Jing He

SBTを使用すると、3.0にFilterRegistrationクラスが存在し、JETTYまたはJava 8このJAR 2.5を使用すると、依存関係として自動的に追加されます。

修正:Servlet-api-2.5 JARが混乱していたので、依存関係にservlet-api-3.0 jarを追加してこの問題を解決しました。

3
Ravi Macha

Intellij Ideaで発生している場合は、プロジェクト設定に移動し、モジュール内のjarを見つけて削除する必要があります。次に、シェルを介してsbtでコードを実行します。 jarファイル自体を取得してから、intellijに戻り、intellijを介してコードを再実行します。それはどういうわけか私のために動作し、エラーを修正します。それがもう現れないので、私は問題が何であったかわかりません。

ああ、私もjarファイルを削除し、「javax.servlet:javax.servlet-api:3.1.0」をmaven経由で手動で追加したところ、エラーが消えたことがわかります。

3
M.Rez

私にとっては次のように動作します:

libraryDependencies ++= Seq(
    "org.Apache.spark" %% "spark-core" % sparkVersion.value % "provided",
    "org.Apache.spark" %% "spark-sql"  % sparkVersion.value % "provided",
    ....................................................................
).map(_.excludeAll(ExclusionRule(organization = "javax.servlet")))
2
Igorock

Intellij内で実行している場合、2つのアクティブなモジュール(プロジェクト用とsbt用)がある場合は、プロジェクト設定を確認してください。

既存のプロジェクトのインポート中に問題が発生した可能性があります。

1
Juan Alonso

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を再現するためのシェルでコードを実行することは可能ですか?.

0
Pankaj Narang