Problemhintergrund
In der Datenplattform erfordert die Projektkonstruktion die Verwendung von ES und HBASE, um eine Datenabfrage -Schnittstelle zu erstellen. Während des Integrationsprozesses treten die JAR -Paketkonflikte auf: com.google.common.base.stopwatch. () V aus der Klasse org.apache.hadoop.hbase.zookeeper.metatablelocator
org.apache.hadoop.hbase.donotretryioException: java.lang.illegalacceserror: Versuchte, auf Methode com.google.common.base.stopwatch zuzugreifen. org.apache.hadoop.hbase.client.rpcryingcaller.translateException (rpcryingcaller.java:239) at org.apache.hadoop.hbase.client.rpcretrycaller.callwithres (rpcryingcaller.java:java:java:150) java.lang.thread.run (thread.java:745) verursacht durch: java.lang.illegalacceserror: Versuch, auf Methode com.google.common.base.stopwatch zuzugreifen. org.apache.hadoop.hbase.zookeeper.metatablelocator.blockuntil ... at org.apache.hadoop.hbase.client.regionServercallable.prepare (Regionsservercallable.java:75) bei org.apache.hadoop.hbase.client.rpcretryingcaller.callwithres (rpcretryingcaller.java:134) ... 45 More
Lösung
Nach der Untersuchung wurde bestätigt, dass es sich um einen Konflikt handelte, der durch das Paket com.google.guava verursacht wurde. ES hängt von Version 18 und höher ab, während HBase nur Version 16 und höher unterstützt. Das Guava -Paket ändert sich intern von 17 und die Methode ändert sich, sodass 18 mit Version 16 nicht rückständig ist. Während des Projektbetriebs wird der aufrufende Prozess von ES und HBase verwirrt, wenn die 16 und 18 Versionen gleichzeitig eingeführt werden. Dann wird es als nächstes einfach sein. Wir können neu verpacken, Guava18 in ES eingeben und dann das Paket anstellen, das die Guava16 -Version in der POM -Datei verweist. Auf diese Weise nennt ES Guava18, das in das Paket eingegeben wird, während HBase Guava16 aufgerufen wird, die außerhalb des Eingangs der Außenseite von Guava16.
Umpacken
Erstellen Sie ein neues Maven -Projekt und konfigurieren Sie es wie folgt in der POM -Datei:
<? 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> <!-This Mavene-Maven-Projekt ist das Ziel des JAR-Projekts. In ES, erforderliche Guava 18+ oder Up. Aber in HBase sollten Sie Guava 16 oder Blase verwenden. CD das Projektverzeichnis und rennen Sie 'sh ./Cleanbuild.sh', du wirst ein neues selbstglas bekommen. Passen Sie dann Ihr Projekt pom.xml Whatth an: <De vorstellen> <gruppe> douguo.shaded.Elasticsearch </GroupId> <artifactid> douguo_shaded_elasticsearch </artifactId> <version> 1.0-snapshot </Version> <ausschlüsse> <exclusion> <gruppe> <GroupId> <artifactId> ElasticSearch </artifactId> </exklusion> </exklusions> </abhängig> Schließlich wird Ihr JAR -Comflic behoben. @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> <elasticsearch.version>2.4.1</elasticsearch.version> </properties> <dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>${elasticsearch.version}</version> </dependency> <dependency> <groupId>org.elasticsearch.plugin</groupId> <artifactId>shield</artifactId> <version>${elasticsearch.version}</version> </dependency> </dependencies> <build> <plugins> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.1</version> <configuration> <createdEpendenceducedPom> false </createdEpendencedPom> </configuration> <ausführung> <phase> Paket </Phase> <giele> <giel> Schatten </garan> </gores> <configuration> <relocations> <Robococation> <muster> com.google.guava </musters> <schattierter teadpatter> douguo.shadeded. </relocation> <relocation> <muster> org.joda </muster> <schattierter> douguo.shaded. <Robocation> <Muster> com.google.ThirdParty </muster> <schattierter> douguo.shaded.Elasticsearch.ThirdParty </schattiertPattern> </relocation> </relocations> <transformers> <transformators -Implementierung = "org.APRAINS.PLUGLINGS.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.SHADE.MADELLIS. </configuration> </execution> </executions> </plugin> </build> <repositories> <repository> <id>elasticsearch-releases</id> <url>http://maven.elasticsearch.org/releases</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </releases> <Snapshots> <enabled> false </enabled> </snapshots> </repository> </repository> </repositories> </project> Migrieren Sie org.joda und andere 4 mögliche widersprüchliche JAR-Pakete durch das Plugin- und RE-JAR-Paketen von Maven-Shade-Plugin, damit Sie bei der Einführung dieses JAR-Pakets die eigenen Abhängigkeiten des JAR-Pakets verwenden können, anstatt externe Abhängigkeiten zu verwenden. Es ist hier zu beachten, dass alle com.google.common und andere 4 Pakete zurückgewandert werden müssen, ansonsten Java.lang.IilleGalacceserror: Versuch, auf Methode zuzugreifen com.google.common.base -Fehler erfolgt.
Projektpaket
MVN Clean Installation
Das neue Abhängigkeitspaket befindet sich im .M2 -Maven -Lagerhaus. Wenn das Unternehmen das Lagerhaus baut, muss das JAR -Paket hochgeladen werden. Wenn Sie das JAR -Paket direkt ausführen, denken Sie daran, das Projekt neu zu kompilieren und das LIB -Verzeichnis zu ersetzen
Projekt lädt neues Paket
Konfigurieren Sie es einfach in der POM -Datei:
<!-- douguo.shaded.elasticsearch --><dependency> <groupId>douguo.shaded.elasticsearch</groupId> <artifactId>douguo_shaded_elasticsearch</artifactId> <version>1.0-SNAPSHOT</version> <exclusions> <exclusion> <groupId>org.elasticsearch</groupId> <artifactId> ElasticSearch </artifactid> </exclusion> </exklusions> </abhängig> <!-https://mvnrepository.com/artifact/com.google Clean as Installieren Sie Douguo.shaded.Elasticsearch -> <De vorstellen> <gruppe> com.google.guava </Groupid> <artifactid> Guava </artifactid> <version> 16.0 </Version> </abhängig>
Auf diese Weise befindet sich das Guava18 -Paket unter douguo.shaded.elasticsearch und es wird zuerst aufgerufen. Die extern konfigurierte Guava16 wird von HBase aufgerufen. Die 2 Versionen von JAR -Paketen existieren unabhängig voneinander!
Zu diesem Zeitpunkt ist das Problem gelöst!
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.