2015-01-22 2 views
19

Ich benutze Scala, um eine Spark-Anwendung lokal zu erstellen und auszuführen.Spark-Anwendung wirft javax.servlet.FilterRegistration

Mein 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") 

Während der Laufzeit erhalte ich die Ausnahme:

Exception in thread "main" java.lang.ExceptionInInitializerError während Aufruf von ... Verursacht durch: java.lang.SecurityException: class Die Unterschriftsinformationen von "javax.servlet.FilterRegistration" stimmen nicht mit Unterzeichnerinformationen anderer Klassen im selben Paket überein

Die Ausnahme wird hier ausgelöst:

val sc = new SparkContext("local", "HBaseTest") 

ich die IntelliJ Scala/SBT-Plugin verwenden.

Ich habe gesehen, dass andere Leute auch dieses Problem haben suggestion solution. Aber das ist ein Maven Build ... Ist mein sbt hier falsch? Oder irgendein anderer Vorschlag, wie ich dieses Problem lösen kann?

Antwort

34

Siehe meine Antwort auf eine ähnliche Frage here. Der Klassenkonflikt kommt zustande, weil HBase von org.mortbay.jetty abhängt und Spark von org.eclipse.jetty abhängt. Ich konnte das Problem lösen, indem ich org.mortbay.jetty Abhängigkeiten von HBase ausschloss. Wenn Sie hadoop-common ziehen, müssen Sie möglicherweise auch javax.servlet von hadoop-common ausschließen. Ich habe eine Arbeits HBase/Spark-Setup mit meinem sbt Abhängigkeiten setzen sich wie folgt zusammen:

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") 
+0

Nur für den Fall, dass jemand interessiert, funktioniert dieser Ansatz auch mit Maven. – hba

0

versuchen, ein einfaches Programm, ohne die hadoop und hbase Abhängigkeit laufen

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" 

Es sollte die Abhängigkeiten von Mismatch. Stellen Sie außerdem sicher, dass Sie während des Kompilierens und während des Laufens dieselbe Version von jars haben.

Ist es auch möglich, den Code auf Spark Shell zu reproduzieren? Ich kann besser helfen.

+0

Spark Standalone funktioniert .... das ist nicht das Problem. Ich brauche diese Bibliotheken und ich benutze sbt - also erwarte ich, dass runtime/compile das gleiche ist – Marco

1

Wenn Sie in intellij ausgeführt werden, überprüfen Sie bitte, in Projekteinstellungen, wenn Sie zwei aktive Module (eine für das Projekt und eine andere für sbt).

Wahrscheinlich ein Problem beim Importieren vorhandener Projekte.

+0

sollten wir die zwei aktiven Module haben, oder nur eines? hast du mehr Infos dazu? –

3

Wenn es in Intellij Idee geschieht, sollten Sie zu der Projekteinstellung gehen und das Gefäß in den Modulen finden und es entfernen. Dann führe deinen Code mit sbt durch die Shell aus. Es ruft die JAR-Dateien selbst ab und kehrt dann zu intellij zurück und führt den Code über intellij erneut aus. Es funktioniert irgendwie für mich und behebt den Fehler. Ich bin mir nicht sicher, was das Problem war, da es nicht mehr auftaucht.

Oh, ich habe auch die JAR-Datei entfernt und "javax.servlet: javax.servlet-api: 3.1.0" manuell hinzugefügt und jetzt kann ich sehen, dass der Fehler verschwunden ist.

2

Wenn Sie SBT verwenden, ist die FilterRegistration-Klasse in 3.0 vorhanden und auch wenn Sie JETTY oder Java 8 dieses JAR 2 verwenden.5 fügt automatisch als Abhängigkeit,

Fix: Servlet-api-2.5 JAR war das Chaos dort, ich dieses Problem gelöst durch Servlet-api-3.0 jar in Abhängigkeiten hinzufügen,

4

Wenn Sie IntelliJ IDEA verwenden, versuchen Sie dies:

  1. Rechts Stammordner des Projekts klicken, wählen Öffnen Moduleinstellungen
  2. in dem neuen Fenster wählen Module in der linken Navigationsspalte
  3. In der Spalte ganz rechts, wählen Sie Abhängigkeiten Registerkarte finden Maven: javax.servlet: Servlet-api: 2.5
  4. Schließlich bewegen Sie einfach diesen Artikel unten durch ALT + Pfeil nach unten drücken.

Es sollte dieses Problem lösen.

Diese Methode kam von http://wpcertification.blogspot.ru/2016/01/spark-error-class-javaxservletfilterreg.html

+0

arbeitete für mich. Vielen Dank – Deepakkumar