J'utilise Quand j'utilise le mapreducejob sur mon cluster Hadoop, j'ai un exception dans le fil "Main" Java.lang.noschmethoderror:
org.apache.commons.cli.option.builder (ljava / lang / string;) LORG / Apache / Commons / CLI / Option $ Builder; P>
blockQuote>
Je ne comprends pas parce que la méthode existe dans la classe Merci pour votre temps. p> hadoop-2.7.2 code> et j'ai fait un Mapreducejob avec Intellij. Dans mon travail, j'utilise
apache.cons.cli-1.3.1 code> et je mets la libère dans le pot. p>
Noschmethoderror code>: p>
Option code> et la classe
(code> est extraite du
Commons-cli.jar code> à mon pot d'application. De plus, je n'ai pas cette question avec mes autres bibliothèques. P>
3 Réponses :
Nous avons résolu ce problème avec la prochaine configuration des grades:
compile('org.apache.parquet:parquet-tools:1.9.0'){ exclude module:"commons-cli" }
Nous avons pu corriger cette erreur en utilisant Maven Relocations de classe . Si vous utilisez le plug-in de l'ombre pour créer votre pot, ajoutez-le après la section POM.XML dans la section appropriée:
<!-- necessary to fix NoSuchMethodError: org.apache.commons.cli.Option.builder --> <relocations> <relocation> <pattern>org.apache.commons.cli</pattern> <shadedPattern>org.shaded.commons.cli</shadedPattern> </relocation> </relocations>
Le problème semble être lié à la manière dont le chargeur code> code> est en train de charger les classes. Étant donné que la classe Dans mon cas, la question résolue en modifiant la séquence d'addition de fichier JAR dans la classe de classe dans le script Shell responsable de la configuration de l'environnement avant l'exécution du programme. Plus tôt, j'ajoutais que le pot dans la classe de classe comme p> est modifié en p> et il a corrigé le problème. < / p> p> statique code> était dans
common-cli 1.4 code>, tandis que certaines des dépendances code> hadoop => se réfèrent toujours à la version plus ancienne - la question s'est produite.
Je viens de trouver que Hadoop utilise Commons-CLI 1.2. Je pense que c'est la source de mon problème, mais je ne sais pas comment le réparer.
Vous pouvez essayer d'exclure
Commons-cli-1.2 code> de la dépendance hadoop dans votre
pom.xml code>, puis hadoop utilisera votre
Commons-cli-1.3.1 code>. Si cela provoque des erreurs, vous feriez mieux d'utiliser
1.2 code> dans votre code.
J'ai fait quelque chose comme ça, mais mon patron ne veut pas de cette façon parce qu'il ne résout pas le problème. Si nous avons le même problème plus tard avec une autre lib, il ne veut plus résoudre le problème. Mais merci de votre conseil.
Je l'ai réparé en modifiant la séquence dans laquelle les pots sont déclarés dans la classe de classe. S'il vous plaît vérifier ma réponse.