Background Problem
Na plataforma de dados, a construção do projeto requer o uso de ES e HBASE para criar uma interface de consulta de dados. Durante o processo de integração, ocorrem os conflitos do pacote JAR: com.google.common.base.stopwatch. () V da classe org.apache.hadoop.hbase.zookeeper.metatableLocator
org.apache.hadoop.hbase.donotretryioException: java.lang.illegalaccessError: tentei acessar o método com.google.common.base.stopwatch. org.apache.hadoop.hbase.client.rpretryingCaller.TranslateException (rpcretryingCaller.java:239) em org.apache.hadoop.hbase.client.rpcretyingCaller.callwithreties (rpcretyingcaller.java.java.rprectyingCaller.Callwithretries (rpcretyingCaller.java.JAVACETRACALLER.CALL10 java.lang.thread.run (thread.java:745) causado por: java.lang.illegalaccessError: tentei acessar o método com.google.common.base.stopwatch. org.apache.hadoop.hbase.zookeeper.metatableLocator.blockuntil ... em org.apache.hadoop.hbase.client.regionServerCallable.Prepare (regionServerCallable.java:75) em org.apache.hadoop.hbase.client.rpcretryingcaller.callwithretries (rpcretryingcaller.java:134) ... 45 mais
Solução
Após a investigação, foi confirmado que foi um conflito causado pelo pacote com.google.guava. O ES depende da versão 18 e acima, enquanto o HBase suporta apenas a versão 16 e acima. O pacote de goiaba muda internamente de 17 e o método muda, portanto, 18 não será compatível com a versão 16. Durante a operação do projeto, se as versões 16 e 18 forem introduzidas ao mesmo tempo, o processo de chamada de ES e HBase será confundido. Então será fácil fazer a seguir. Podemos reembalar, digitar Guava18 em ES e, em seguida, exibir o pacote que faz referência à versão GUAVA16 no arquivo POM. Dessa forma, o ES chama Guava18 que é inserido dentro do pacote, enquanto o HBase chama o Guava16 que é inserido do lado de fora.
Reembalagem
Crie um novo projeto Maven e configure -o no arquivo POM da seguinte maneira:
<? xml versão = "1.0" coding = "utf-8"?> <Projeto xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.ww3.org/2001/xmlschaMance 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> <!-Este projeto de maven é o que não tem maven para fixersion para fixersion. Em ES, GUAVA necessária 18+ ou acima. Mas no HBase você deve usar a goiaba 16 ou o golpe. CD O diretório do projeto e Run 'sh ./cleanbuild.sh', você receberá um frasco novo. Em seguida, ajuste seu projeto pom.xml Whatth: <pendence> <puperiD> douguo.shaded.elticsearch </frupid> <stifactId> douguo_shaded_elasticsearch </stutifactId> <versão> 1.0-snapshot </version> <clusions> <ctrusion> <purbroundid> org.els. <stifactId> Elasticsearch </starifactId> </clusion> </cllusions> </pendence> Finalmente, seu JAR COMFLIC será corrigido. @date:2017-11-30 @author:zhangjianfei @since:douguo.shaded.elasticsearch-1.0.0 --> <groupId>douguo.shaded.elasticsearch</groupId> <artifactId>douguo_shaded_elasticsearch</artifactId> <version>1.0-SNAPSHOT</version> <properties> <tasticsearch.version> 2.4.1 </elasticsearch.version> </sperties> <pendências> <pendency> <puperid> org.elasticsearch </groupiD> <TRAFACTID> Elasticsearch </ArtifactId> <versão> $ {Elasticsearch.version} </versão> </dependenty> <pendence> <ArtifactId> Shield </stifactId> <versão> $ {Elasticsearch.version} </versão> </dependency> </dependences> <bruct> <flugins> <voundid> org.apache.maven.plugins </groupid> <TarfactId> MAVEN-HADE-PLUGIN </ArtifactIns> <CreateDependEncyDedPom> false </createEpendEncededPom> </frifiguration> <Execution> <fase> pacote </fase> <tecles> <lection> Shade </Goal> </acecution> </figuration> <ShadDPattern-Sternocation> <dattern> com.google.guava </padrony> <ShadDPPattern> DOUGO.DOMED.GOLED.GOVA </Pattern> <ShadDPPattern> DOUGO.ADEDOMED.GOUD.GOVA </Pattern> <ShadDPatn> </location> <location> <adattery> org.joda </stardy> <ShadedPattern> douguo.shaded.elasticsarch.joda </s ShadedPattern> </relocation> <location> <datternnnicsicshetshometch.omlatmocr.elatch.OltiStomMemch.OltiMemch.OltiClic.OlatCearmCoalmEmolmocrocring.OltSearch.elatmocr.elatmocr.elatmocr.elatmocr.elatchort.elocmolmEarmChometCl. <pattern>com.google.thirdparty</pattern> <shadedPattern>douguo.shaded.elasticsearch.thirdparty</shadedPattern> </relocation> </relocations> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer" /> </transformers> </configuration> </secution> </conformions> </plugin> </fruct> <popositórios> <positório> <d> Elasticsearch-Reluases </dod> <url> http://maven.elasticsearch.org/releases </url> <ableases> <ilabiled> </ilabiled> <inabled> false </itilabed> </snapshots> </positório> </positório> </positórios> </jé Migre org.joda e outros 4 pacotes de jar conflitantes possíveis através do plugin maven-de-sombra-plugin e pacotes de jar de novo Type para que, ao introduzir este pacote JAR, você possa usar as dependências do próprio pacote de jar em vez de usar dependências externas. Deve -se notar aqui que todos os pacotes com.google.common e outros quatro precisam ser remigrados, caso contrário, java.lang.illegalaccesSERROR: Tentei acessar o método com.google.common.base Oror.
Pacote de projeto
MVN Clean Install
O novo pacote de dependência estará no armazém .m2 Maven. Se a empresa criar o armazém, é necessário fazer upload do pacote JAR. Se você executar o pacote JAR diretamente, lembre -se de recomitar o projeto e substituir o diretório Lib
Projeto carrega um novo pacote
Basta configurá -lo no arquivo POM:
<!-douguo.shaded.ellasticsearch-> <pendency> <puperiD> douguo.shaded.elasticsearch </groupiD> <TRAFACTID> DOUGUO_SHADED_ELASTICSECHECH </STIFACTID> <Versão> 1.0-SNAPSHOT </Version> <clusions> <clighioniS> <Gruperid> OR.SNAPSHOT </Version> <clusions> <clighiGer> <urghiD> </ArtifactId> Elasticsearch </starifactId> </clusion> </clusions> </dependency> <!-https://mvnrepository.com/artifact/com.google.guava/Guava-> <!-Esta guava é usada apenas em Habse em es, 18.0+ exigidos, mas. Limpo como instalar dougo.shaded.elticsearch -> <pendency> <voundid> com.google.guava </foupid> <stifactId> goiava </sutifactId> <versão> 16.0 </versão> </dependency>
Dessa forma, o pacote Guava18 está sob Dougo.shaded.elticsearch, e o ES será chamado primeiro. A goiAVA16 configurada externamente será chamada pelo HBASE. As duas versões dos pacotes JAR existem independentemente um do outro!
Neste ponto, o problema é resolvido!
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.