Latar belakang masalah
Di platform data, konstruksi proyek membutuhkan penggunaan ES dan HBase untuk membangun antarmuka kueri data. Selama proses integrasi, konflik paket JAR terjadi: com.google.common.base.stopwatch. () V dari kelas org.apache.hadoop.hbase.zookeeper.metatablelocator
org.apache.hadoop.hbase.donotretryioException: java.lang.illegalaccessError: mencoba mengakses metode com.google.common.base.stopwatch. <init> () v dari kelas org.apache.hadoop.hbase.zoookeeper.metateDelocator org.apache.hadoop.hbase.client.rpcretryingcaller.translateException (rpcretryingcaller.java:239) di org.apache.hadoop.hbase.client.rpcretriingcaller.callwithRetries (rpcretretretretretretretretretretretretretretretretretretretretretretretretretretretri.150 ... java.lang.thread.run (thread.java:745) disebabkan oleh: java.lang.illegalaccesserror: mencoba mengakses metode com.google.common.base.stopwatch. <init> () v dari kelas org.apache.hadoop.hbase.zooKeeper.metAbel org.apache.hadoop.hbase.zooKeeper.metatablelocator.blockuntil ... di org.apache.hadoop.hbase.client.regionServerCallable.prepare (regionservercallable.java:75) di org.apache.hadoop.hbase.client.rpcretryingcaller.callwithRetries (rpcretryingcaller.java:134) ... 45 lebih
Larutan
Setelah diselidiki, dikonfirmasi bahwa itu adalah konflik yang disebabkan oleh paket com.google.guava. ES tergantung pada versi 18 dan di atas, sementara HBase hanya mendukung versi 16 dan di atas. Paket jambu berubah secara internal dari 17 dan metode berubah, jadi 18 tidak akan kompatibel dengan versi 16. Selama operasi proyek, jika versi 16 dan 18 diperkenalkan pada saat yang sama, proses panggilan ES dan HBase akan bingung. Maka itu akan mudah dilakukan selanjutnya. Kami dapat mengemas ulang, mengetik Guava18 ke ES, dan kemudian menampilkan paket yang merujuk versi Guava16 dalam file POM. Dengan cara ini, ES memanggil Guava18 yang dimasukkan di dalam paket, sementara HBase memanggil Guava16 yang dimasukkan di luar.
Pengemasan ulang
Buat Proyek Maven baru dan konfigurasinya dalam file POM sebagai berikut:
<? 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 XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <ModelVersion> 4.0.0. Di ES, guava yang diperlukan 18+ atau lebih. Tetapi di HBASE Anda harus menggunakan jambu guava 16- atau pukulan. CD direktori proyek dan jalankan 'sh ./cleanbuild.sh', Anda akan mendapatkan toples baru. Kemudian, sesuaikan proyek Anda pom.xml whatth: <dep dependency> <groupid> douguo.shaded.elasticsearch </groupid> <ArTifactid> douguo_shaded_elasticsearch </stifactid> <version> 1.0-snapshot </version> <ckscuxclect> <cexclusion> <scroupD> <ArTifactId> Elasticsearch </RiTtifacTID> </Exclusion> </Exclusions> </dependency> Akhirnya, Jar Comflic Anda akan diperbaiki. @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 </eRelasticsearch.Version> </Properties> <dependencies> <dependency> <Groupid> org.elasticsearch </proupid> <ArtifactId> Elasticsearch </artifactid> <version> $ {elasticsearch.version} </version> </Artifactid> <version> $ {elasticsearch.version} </version> </Depgerency> <ArTifactId> SHIELD </artifactId> <version> $ {Elasticsearch.Version} </version> </dependency> </dependencies> <build> <dlughins> <groupid> org.apache.maven.plugins </groupid> <Artifactid> Maven-shade-plugin </artifacins </groupid> <Artifactid> MAVEN-shade-plugin </artifactid </groupid> <ArTifactId> MAVEN-shade-plugin </artifactids> <Artifactid> <TERTICERARE> <TROGER? <createPendencyRededPom> false </createDependencyRededPom> </Configuration> <Ececution> <phase> paket </phase> <jetik> <jetik> Shade </ject> </ject> <configururation> <pherat> <belocation> <pather> com.google.guava </pola </shadedpattern> Douguo.sever.guant. <relocation> <pattern>org.joda</pattern> <shadedPattern>douguo.shaded.elasticsearch.joda</shadedPattern> </relocation> <relocation> <pattern>com.google.common</pattern> <shadedPattern>douguo.shaded.elasticsearch.common</shadedPattern> </relocation> <relocation> <pol> com.google.tHirdParty </patter> <teadedpattern> douguo.shaded.elasticsearch.tHirdparty </teadedpattern> </belocation> </belocation> <pransformer> <pransformer> "org.apache.maven.plugins.shade.resource> </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 </denabled> </snapshots> </repository> </bepository> </repositories> </joy Project> Migrasi org.joda dan 4 paket toples yang mungkin bertentangan melalui plugin plugin Maven-Shade dan tipe-type package sehingga ketika memperkenalkan paket JAR ini, Anda dapat menggunakan dependensi paket JAR sendiri alih-alih menggunakan ketergantungan eksternal. Perlu dicatat di sini bahwa semua com.google.common dan 4 paket lainnya perlu dihidupkan kembali, jika tidak java.lang.illegalaccessError: mencoba mengakses metode com.google.common.base akan terjadi.
Paket Proyek
MVN Clean Instal
Paket ketergantungan baru akan berada di gudang .m2 Maven. Jika perusahaan membangun gudang, perlu mengunggah paket JAR. Jika Anda menjalankan paket JAR secara langsung, ingatlah untuk mengkompilasi ulang proyek dan mengganti direktori LIB
Proyek memuat paket baru
Cukup konfigurasikan di file pom:
<!-douguo.shaded.elasticsearch-> <dependency> <groupid> douguo.shaded.elasticsearch </groupid> <ArTifactId> douguo_shaded_elasticsearch </arttifactid> <version> 1.0-snapshot </versi <cexceckseare> <cexcex excuplusion> <croupgerg.groupsearch. <artifactId>elasticsearch</artifactId> </exclusion> </exclusions></dependency><!-- https://mvnrepository.com/artifact/com.google.guava/guava --><!-- this guava is only used in habse in es, 18.0+ is required, but hbase only supported 16.0 or blow. Bersihkan seperti instal douguo.shaded.elasticsearch -> <dependency> <groupid> com.google.guava </groupid> <ArtifactId> jambu </artifactid> <version> 16.0 </versi> </dependency>
Dengan cara ini, paket Guava18 berada di bawah douguo.shaded.elasticsearch, dan ES akan dipanggil terlebih dahulu. Guava16 yang dikonfigurasi secara eksternal akan dipanggil oleh HBase. 2 versi paket JAR ada secara independen satu sama lain!
Pada titik ini, masalahnya terpecahkan!
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.