web-dev-qa-db-fra.com

L'application Spark lève javax.servlet.FilterRegistration

J'utilise Scala pour créer et exécuter une application Spark localement.

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

Pendant l'exécution, j'obtiens l'exception:

Exception dans le fil "principal" Java.lang.ExceptionInInitializerError lors de l'appel de ... Causée par: Java.lang.SecurityException: class Les informations sur le signataire "javax.servlet.FilterRegistration" ne correspondent pas informations de signataire d'autres classes dans le même package

L'exception est déclenchée ici:

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

J'utilise le plugin IntelliJ Scala/SBT.

J'ai vu que d'autres personnes ont aussi ce problème solution suggérée . Mais c’est une construction maven ... Est-ce que mon problème est faux ici? Ou toute autre suggestion comment je peux résoudre ce problème?

20
Marco

Voir ma réponse à une question similaire ici . Le conflit de classe survient parce que HBase dépend de org.mortbay.jetty et Spark dépend de org.Eclipse.jetty. J'ai pu résoudre le problème en excluant les dépendances org.mortbay.jetty de HBase.

Si vous extrayez hadoop-common, vous devrez peut-être également exclure javax.servlet de hadoop-common. J'ai une configuration de travail HBase/Spark avec mes dépendances sbt configurées comme suit:

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")
36
Mansoor Siddiqui

Si vous utilisez IntelliJ IDEA, essayez ceci:

  1. Cliquez avec le bouton droit sur le dossier racine du projet, choisissez Ouvrir les paramètres du module.
  2. Dans la nouvelle fenêtre, choisissez Modules dans la colonne de navigation de gauche.
  3. Dans la colonne la plus à droite, sélectionnez l'onglet Dependencies, recherchez Maven: javax.servlet: servlet-api: 2.5
  4. Enfin, déplacez simplement cet élément vers le bas en appuyant sur ALT + Bas. 

Cela devrait résoudre ce problème.

Cette méthode est issue de http://wpcertification.blogspot.ru/2016/01/spark-error-class-javaxservletfilterreg.html

4
Jing He

Lorsque vous utilisez SBT, la classe FilterRegistration est présente dans la version 3.0 et, si vous utilisez JETTY ou Java 8, ce JAR 2.5 est automatiquement ajouté en tant que dépendance.

Corrigé: JAR Servlet-api-2.5 était le bazar là-bas, j'ai résolu ce problème en ajoutant jar servlet-api-3.0 dans les dépendances,

3
Ravi Macha

Si cela se produit dans Intellij Idea, vous devez aller dans les paramètres du projet, trouver le fichier jar dans les modules et le supprimer. Ensuite, exécutez votre code avec sbt via Shell. Il récupérera les fichiers jar, puis retournera à intellij et relancera le code via intellij. Cela fonctionne en quelque sorte pour moi et corrige l'erreur. Je ne sais pas quel était le problème car il ne se présente plus. 

J'ai également supprimé le fichier jar et ajouté "javax.servlet: javax.servlet-api: 3.1.0" via maven à la main et je peux maintenant voir l'erreur disparaître.

3
M.Rez

Pour moi, fonctionne comme suit:

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

Si vous utilisez intellij, veuillez vérifier les paramètres du projet si vous avez deux modules actifs (un pour le projet et un autre pour sbt).

Probablement un problème lors de l'importation d'un projet existant.

1
Juan Alonso

essayez de lancer un programme simple sans les dépendances hadoop et 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"

Il devrait y avoir une discordance des dépendances. Assurez-vous également que vous avez la même version des fichiers jar lors de la compilation et de l'exécution.

Est-il également possible d'exécuter le code sur spark Shell pour le reproduire? Je vais pouvoir aider mieux.

0
Pankaj Narang