Problème Contexte
Dans la plate-forme de données, la construction du projet nécessite l'utilisation d'ES et HBASE pour créer une interface de requête de données. Pendant le processus d'intégration, les conflits de package JAR se produisent: com.google.common.base.stopwatch. () V De la classe org.apache.hadoop.hbase.zookeeper.metatablellocator
org.apache.hadoop.hbase.DonotretryioException: java.lang.illegalaccesserror: a essayé d'accéder à la méthode com.google.common.base.stopwatch. <Init> () V De la classe org.apache.hadoop.hbase.zookeeper.metatableLelocator at at at at at at att. org.apache.hadoop.hbase.client.rpcretryingCaller.TranslateException (rpcretryingCaller.java:239) à org.apache.hadoop.hbase.client.rpcretryingCaller java.lang.thread.run (thread.java:745) causée par: java.lang.illegalaccesserror: a essayé d'accéder à la méthode com.google.common.base.stopwatch. <Init> () v De la classe org.apache.hadoop.hbase.zookeeper.metatablelocator at at at at at at at at at at at at at at at at at atter org.apache.hadop org.apache.hadop
Solution
Après enquête, il a été confirmé qu'il s'agissait d'un conflit causé par le package com.google.guava. ES dépend de la version 18 et supérieure, tandis que HBASE ne prend en charge que la version 16 et plus. Le package de goyava change en interne à partir de 17 et la méthode change, donc 18 ne sera pas compatible avec la version 16. Pendant le fonctionnement du projet, si les versions 16 et 18 sont introduites en même temps, le processus d'appel de ES et HBASE sera confus. Ensuite, ce sera facile à faire ensuite. Nous pouvons reconditionner, taper Guava18 dans ES, puis afficher le package qui fait référence à la version Guava16 dans le fichier POM. De cette façon, ES appelle Guava18 qui est entré dans le package, tandis que HBASE appelle GuAVA16 qui est entré à l'extérieur.
Reconditionnement
Créez un nouveau projet Maven et configurez-le dans le fichier POM comme suit:
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: ScheMalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <Modelversion> 4.0.0 </ Modelversion> <! - Ce projet Maven est de fixer le comflic jar dans HBASE & Elascyearch. en es, la goyave requise 18+ ou plus. Mais dans HBASE, vous devez utiliser la goyave 16 ou souffler. CD Le répertoire du projet et exécuter 'sh ./cleanbuild.sh', vous obtiendrez un nouveau pot-soi. Ensuite, ajustez votre projet pom.xml whatth: <dependency> <proupId> douguo.shaded.elasticsearch </proncId> <artifactId> douguo_shaded_elasticsearch </ artifactid> <version> 1.0-snapshot </-version> <cordid> <cusclusion> <proupId> Org.ellasticSearch </cordid> <ArtefactId> elasticsearch </letefactId> </clussion> </clusion> </Dependency> Enfin, votre jar comflic sera corrigé. @Date: 2017-11-30 @Author: zhangjianfei @Since: douguo.shaded.ellasticsearch-1.0.0 -> <proupId> douguo.shaded.elasticsearch </proncId> <Artifactid> Douguo_Shaded_ElasticSearch </ Artifactid> <version> 1.0-snapshot <Elasticsearch.Version> 2.4.1 </HelasticSearch.Version> </properties> <Dependance> <Dependance> <GroupId> org.Elasticsearch </proupId> <ArtifActid> elasticsearch </ artifactid> <version> $ {elasticsearch.version} </preentency> <pedency> <pouprid> org.EllasticSearch.Plugin </pedency> <petendency> <proupid> org.ElasticSearch.Search. <ArtefactId> Shield </ artifactid> <DERSE> $ {elasticsearch.version} </-version> </ Dependency> </Dependces> <fuild> <Glugins> <ProupId> org.apache.maven.plugins </prouvenid> <Artifactid> Maven-shade-Plugin </RetifActid> <version> 2.4.1 </ version> <reatedEpendencyRedOedPom> false </ CreatedEpendencyRedOedPom> </ Configuration> <Exécution> <gase> Package </sathe> <objectifs> <objectif> Shade </ but> </pus> <filofracing> <filocations> <relocation> <atmate> com.google.guava </atmate> <wededPattern> DouGue.Shaded.Elasticarch.UVEAVA. </flocation> <lacondeuse> <atmatter> org.joda </atmate> <ShadedPattern> Douguo.shaded.Elasticsearch.joda </swedPattern> </blocation> <flocation> <mattern> com.google.common </attemle> <shadEdPattern> Douguo.shaded.Ellasticarch.Common </ ShadedPattern> Douguo> <flocation> <flocation> <mattern> com.google.thirdParty </atmate> <ShadedPattern> douguo.shaded.ellasticsearch.thirdParty </swedPattern> </bache> </ relocations> <Transformers> <Transformer Implementation = "org.apache.maven.plugins. </ Execution> </ Exécutions> </ Plugin> </ Build> <Depositories> <Fopository> <id> elasticsearch-Releases </id> <url> http://maven.elasticsearch.org/releases </url> <fermeases> <cvelows> true </abled> <updatepolicy> quotidiennement </ftedatepolicy> <veabled> false </veloable> </napshots> </ Repository> </ Repository> </pichisitories> </ project> Migrer Org.joda et les 4 autres packages JAR conflictuels possibles via le plugin Maven-Shade-Plugin et les packages de JAR de re-type afin que lors de l'introduction de ce package JAR, vous pouvez utiliser les propres dépendances du package JAR au lieu d'utiliser des dépendances externes. Il convient de noter ici que tous les packages com.google et autres packages doivent être remigrés, sinon java.lang.illegalaccesserror: a essayé d'accéder à la méthode com.google.common.base, une erreur se produira.
Package de projet
MVN Clean Installation
Le nouveau package de dépendances sera dans l'entrepôt .m2 Maven. Si l'entreprise construit l'entrepôt, il est nécessaire de télécharger le package JAR. Si vous exécutez directement le package JAR, n'oubliez pas de recompiler le projet et de remplacer le répertoire Lib
Project charge un nouveau package
Configurez-le simplement dans le fichier POM:
<! - Douguo.Shaded.ElasticSearch -> <dependency> <proupId> Douguo.shaded.Elasticsearch </proupId> <ArtifActid> Douguo_Shaded_ElasticSearch </ Artifactid> <Dersion> 1.0-Snapshot </ Version> <Exclusions> <Exclusion> <GroupId> Org.ElasticSearch </ GroupID> <ArtefactId> elasticsearch </ artifactid> </cossion> </cussions> </ Dependency> <! - https://mvnrepository.com/artifact/com.google.guava/guava -> <! - Ce guava n'est utilisé que dans la Habse à l'es, 18.0+ est nécessaire, mais HBase ne soutient que 16.0 ou le souffle. Nettoyer comme installer Douguo.Shaded.ElasticSearch -> <Dependency> <GroupId> com.google.guava </prôdId> <ArtefactId> Guava </ ArfactId> <Dersion> 16.0 </DERNIFRATION> </DENDENCENCE>
De cette façon, le package Guava18 est sous Douguo.Shaded.ElasticSearch, et ES sera appelé en premier. Le GuAVA16 configuré en externe sera appelé par HBASE. Les 2 versions de packages en pot existent indépendamment les unes des autres!
À ce stade, le problème est résolu!
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.