Проблема фон
На платформе данных конструкция проекта требует использования ES и HBASE для создания интерфейса запроса данных. Во время процесса интеграции возникают конфликты пакета JAR: com.google.common.base.stopwatch. () V из класса org.apache.hadoop.hbase.zookeeper.metatablelocator
org.apache.hadoop.hbase.donotretryioexception: java.lang.illegalaccesserror: попытаться получить доступ к методу com.google.common.base.stopwatch. <int> () v из класса org.apache.hadoop.hbase.zookeeper.metatablecator at org.hadoop.hbase.zookeeper.metaTableCator в org.apache.hadoop.hbase.client.rpcretryingcaller.translateExcept java.lang.thread.run (thread.java:745), вызванная: java.lang.illegalaccesserror: попытаться получить доступ к методу com.google.common.base.stopwatch. org.apache.hadoop.hbase.zookeeper.metatablelocator.blockuntil ... at org.apache.hadoop.hbase.client.regionservercallable.prepare (Regionservercallable.java:75) в org.apache.hadoop.hbase.client.rpcretryingcaller.callwithretries (rpcretryingcaller.java:134) ... 45
Решение
После расследования было подтверждено, что это был конфликт, вызванный пакетом com.google.guava. ES зависит от версии 18 и выше, в то время как HBASE поддерживает только версию 16 и выше. Пакет Guava меняется внутри 17, а метод изменяется, поэтому 18 не будет обратно совместимы с версией 16. Во время операции проекта, если 16 и 18 версий будут введены в то же время, призыв процесс ES и HBASE будет запутан. Тогда это будет легко сделать дальше. Мы можем переупаковать, ввести Guava18 в ES, а затем отобразить пакет, который ссылается на версию Guava16 в файле POM. Таким образом, ES называет Guava18, который вводится внутри пакета, в то время как HBASE вызывает Guava16, который вводится снаружи.
Переупаковка
Создайте новый проект Maven и настройте его в файле POM следующим образом:
<? 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"> <dolidyversion> 4.0.0 </modelversion> <!-этот проект Maven является целью исправления Jarflic Insearn. В ES требуется гуава 18+ или выше. Но в HBASE вы должны использовать гуаву 16- или удар. CD в каталоге проекта и запустите 'sh ./cleanbuild.sh', ты получишь новую банку. Затем измените свой проект pom.xml whatth: <dependency> <groupid> douguo.shaded.elasticsearch </groupid> <artifactid> douguo_shaded_elasticsearch </artifactid> <sersion> 1.0-snapshot </version> <Exclusions> <skessusion> <groupid> org.elasticsearch </version> <Exclusions> <Artifactid> elasticsearch </artifactid> </exclusion> </Исключения> </gropection> Наконец, ваш jar comflic будет исправлен. @Date: 2017-11-30 @Author: Zhangjianfei @Since: Douguo.ShadeD.ElasticSearch-1.0.0-> <groupid> douguo.shaded.elasticsearch </GroupId> <ratifactid> douguo_shaded_elasticsearch </artifactid> <serive> 1.0-snapshoteries> <propactid> <service> 1.0-Snapshoteries> <Elasticsearch.version> 2.4.1 </lelasticsearch.version> </properties> <depertiencies> <depertivence> <groupid> org.elasticsearch </GroupId> <artifactId> ElasticSearch </artifactId> <sersive> $ {elasticsearch.version} </version> </upective> <periate> <groupis> org.elastics.plearmishise. <artifactid> shield </artifactid> <sersion> $ {elasticsearch.version} </version> </dependency> </deperizencies> <buld> <blicins> <groupid> org.apache.maven.plugins </GroupId> <strifactid> maven-shade-plugin </artifactid> <serse> 2.4.1 </версия >1 </версия >1 </версия >1 </версия >1 </версия >1 </версии >1 </версия >1 </artifactid> maven-shade-plugin </artifactid> <persiet>. <CreateEpendendenciesedPom> false </createPendendentEdeducedPom> </configuration> <seecution> <phase> пакет </phase> <Голы> <Холлы> Shade </ogle> </oalle> <figureturation> <selocations> <velocation> <tlement> com.google.guava </pattern> <dhadedpattern> douguo.shaded.elasticsearch.guava </pattern> <dhenedpattern> dougu <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> <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> </выполнение> </refections> </plugin> </build> <prositories> <perpository> <id> elasticsearch-releases </id> <url> http://maven.elasticsearch.org/Releases </url> <leasees> <enabled> </upendation> <puretpolicy> daily </url> <leases> <NABLADED> false </enabled> </snapshots> </Repository> </Repository> </Repositories> </project> Мигрируйте Org.Joda и другие 4 возможных конфликтующих пакетов JAR через плагин Maven-Shade-Plugin и пакеты JAR Re-Type, чтобы при внедрении этого пакета JAR вы могли использовать собственные зависимости пакета JAR вместо использования внешних зависимостей. Здесь следует отметить, что все необходимо перенаправить все com.google.common и другие 4 пакета, в противном случае java.lang.illegalaccesserror: попытка добраться до метода com.google.common.base ошибка.
Проектный пакет
MVN чистая установка
Новый пакет зависимостей будет на складе .M2 Maven. Если компания создает склад, необходимо загрузить пакет JAR. Если вы запускаете пакет JAR напрямую, не забудьте перекомпилировать проект и замените каталог LIB
Проект загружает новый пакет
Просто настройте его в файле POM:
<!-douguo.shaded.elasticsearch-> <dependency> <groupid> douguo.shaded.elasticsearch </groupid> <ratifactid> douguo_shaded_elasticsearch </artifactid> <serview> 1.0-snapshot </version> <Excusions> <comernuse> <groupd> org.elasticsearch <StrifactId> ElasticSearch </artifactid> </exclusion> </excloods> </vehyse> <!-https://mvnrepository.com/artifact/com.google.guava/guava-> <!-эта гуава используется только в habse в ES, 18.0+, но HBASE только поддержал 16.0. Очистите как установить Douguo.shaded.elasticsearch -> <DepeCted> <groupId> com.google.guava </GroupId> <ratifactId> guava </artifactid> <sersion> 16.0 </version> </depertion>
Таким образом, пакет Guava18 находится в рамках Douguo.shaded.elasticsearch, и ES будет называться первым. Внешне настроенный Guava16 будет вызван HBASE. 2 версии пакетов JAR существуют независимо друг от друга!
На этом этапе проблема решена!
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.