Spark application jette javax.servlet.FilterRegistration
Je suis en utilisant Scala pour créer et exécuter une Étincelle application 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")
Au cours de l'exécution j'obtiens l'exception:
Exception in thread "main" java.lang.ExceptionInInitializerError
lors de l'appel de... Causés par: java.lang.SecurityException: classe
"javax.servlet.FilterRegistration"'s signataire de l'information ne correspond pas à
signataire de l'information des autres classes du même package
L'exception est déclenchée ici:
val sc = new SparkContext("local", "HBaseTest")
Je suis à l'aide de l'Ide, Scala/SBT plugin.
J'ai vu que d'autres personnes ont aussi ce problème suggestion de solution. Mais c'est un build maven... Est mon sbt mal ici? Ou toute autre suggestion comment je peux résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Voir ma réponse à une question similaire ici. Les conflits de classe car HBase dépend
org.mortbay.jetty
, et de la bougie dépendorg.eclipse.jetty
. J'ai été en mesure de résoudre le problème en excluantorg.mortbay.jetty
dépendances de HBase.Si vous êtes en tirant dans
hadoop-common
, alors vous pouvez aussi avoir besoin d'exclurejavax.servlet
dehadoop-common
. J'ai un travail HBase/Spark configuration avec mon sbt dépendances défini comme suit:Si vous utilisez IntelliJ IDEA, essayez ceci:
Il faut résoudre ce problème.
Cette méthode est venu de http://wpcertification.blogspot.ru/2016/01/spark-error-class-javaxservletfilterreg.html
Si elle se passe dans Intellij Idea, vous devriez aller pour le projet de création et de trouver le pot dans les modules, et le retirer. Puis exécutez votre code avec sbt à travers la coquille. Elle permettra d'obtenir les fichiers jar lui-même, et ensuite revenir à l'ide, et de ré-exécuter le code par le biais de l'ide. Il fonctionne en quelque sorte pour moi et corrige l'erreur. Je ne sais pas quel était le problème, puisqu'il ne montre pas plus.
Oh, j'ai aussi supprimé le fichier jar, et a ajouté "javax.servlet:javax.servlet-api:3.1.0" par maven par la main et maintenant je peux voir l'erreur a disparu.
Lorsque vous utilisez SBT, FilterRegistration classe est présent dans la version 3.0 et aussi si vous utilisez de la JETÉE Ou Java 8 ce POT de 2,5 il ajoute automatiquement comme la dépendance,
Correctif: Servlet-api-2.5 POT était la pagaille là, j'ai résolu ce problème en ajoutant servlet-api-3.0 pot dans les dépendances,
Si vous exécutez l'intérieur de l'ide, veuillez vérifier dans les paramètres de projet si vous avez deux modules actifs (l'un pour le projet et un autre pour sbt).
Probablement un problème lors de l'importation d'un projet existant.
Pour moi œuvres suivantes:
essayez d'exécuter un programme simple sans hadoop et hbase dépendance
Il devrait y avoir incompatibilité des dépendances. assurez-vous également que vous avez la même version de pots pendant que vous compilez et pendant que vous exécutez.
Aussi est-il possible d'exécuter du code sur la spark shell à reproduire ? Je vais être en mesure d'aider à mieux.