如何解決Hbase、elasticsearch整合中jar包沖突的問(wèn)題-創(chuàng)新互聯(lián)

這篇文章主要介紹了如何解決Hbase、elasticsearch整合中jar包沖突的問(wèn)題,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)是一家專業(yè)提供桐城企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、H5頁(yè)面制作、小程序制作等業(yè)務(wù)。10年已為桐城眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

問(wèn)題背景

再數(shù)據(jù)平臺(tái)中,項(xiàng)目搭建需要使用es和HBASE搭建數(shù)據(jù)查詢接口,整合的過(guò)程中出現(xiàn)jar包沖突的bug :com.google.common.base.Stopwatch.()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator

org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
    at org.apache.hadoop.hbase.client.RpcRetryingCaller.translateException(RpcRetryingCaller.java:239)
    at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:150)
    ...
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
    at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntil
    ...
    at org.apache.hadoop.hbase.client.RegionServerCallable.prepare(RegionServerCallable.java:75)
    at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:134)
    ... 45 more

解決辦法

經(jīng)排查,確認(rèn)是因?yàn)?com.google.guava 這個(gè)包引起的沖突。es依賴于18及以上版本,而HBASE只支持16及以上版本。而guava這個(gè)包從17開(kāi)始內(nèi)部發(fā)生變化,方法發(fā)生改變,所以18并不會(huì)向下兼容16版本。在項(xiàng)目運(yùn)行的過(guò)程中,如果同時(shí)引入16、18版本,es及hbase的調(diào)用過(guò)程會(huì)發(fā)生混亂。那么接下來(lái)就好辦了,我們可以重新打包,將guava18打入es內(nèi)部,再在pom文件中顯示引用guava16版本的包。這樣,es調(diào)用包內(nèi)部打入的guava18,而hbase調(diào)用外部的guava16。

重新打包

新建maven工程,在pom文件中進(jìn)行如下配置:

<?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>

  <!--
    this maven project is aim to fix the jar comflic in hbase & elasticsearch.
    in es, required guava 18+ or up. but in hbase you should use guava 16- or blow.

    cd the project directory and run 'sh ./cleanbuild.sh',you will get a new-self jar.
    then, adjust your project pom.xml whth:
    <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>
      </exclusions>
    </dependency>
    finally, your jar comflic will be fixed.

    @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>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.1</version>
        <configuration>
          <createDependencyReducedPom>false</createDependencyReducedPom>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <relocations>
                <relocation>
                  <pattern>com.google.guava</pattern>
                  <shadedPattern>douguo.shaded.elasticsearch.guava</shadedPattern>
                </relocation>
                <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>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </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>
  </repositories>

</project>

將org.joda等4個(gè)可能有沖突的jar包通過(guò)maven-shade-plugin插件遷移后重新打個(gè)jar包從而使得在引入這個(gè)jar包時(shí)能夠使用該jar包自己的依賴而不是使用外部依賴。這里需要注意的是,需要將com.google.common等4個(gè)包全部重新遷移,否則會(huì)出現(xiàn)java.lang.IllegalAccessError: tried to access method com.google.common.base的錯(cuò)誤

項(xiàng)目打包

mvn clean install

新的依賴包會(huì)在.m2 maven倉(cāng)庫(kù)中,如果公司搭建了倉(cāng)庫(kù)的話,需要上傳jar包。如果直接運(yùn)行jar包的話,記得重新編譯項(xiàng)目,并替換lib目錄

項(xiàng)目載入新包

只需要在pom文件中配置:

<!-- 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>
  </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.
   clean as install douguo.shaded.elasticsearch -->
<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>16.0</version>
</dependency>

這樣,guava18包就在douguo.shaded.elasticsearch下,es會(huì)優(yōu)先調(diào)用。而外部配置的guava16就會(huì)被HBASE調(diào)用。2個(gè)版本的jar包互相獨(dú)立存在!

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何解決Hbase、elasticsearch整合中jar包沖突的問(wèn)題”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

當(dāng)前文章:如何解決Hbase、elasticsearch整合中jar包沖突的問(wèn)題-創(chuàng)新互聯(lián)
鏈接地址:http://m.kartarina.com/article20/ccihco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、做網(wǎng)站標(biāo)簽優(yōu)化、響應(yīng)式網(wǎng)站、網(wǎng)站收錄、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
主站蜘蛛池模板: AAA级久久久精品无码片| 国产怡春院无码一区二区| 久久国产精品成人无码网站| 久久久久亚洲av无码专区蜜芽| 久久精品九九热无码免贵| 日韩免费人妻AV无码专区蜜桃 | 少妇爆乳无码专区| 人妻av无码专区| 麻豆AV无码精品一区二区 | 永久免费无码网站在线观看个 | 无码精品黑人一区二区三区| 亚洲AV色无码乱码在线观看| 99精品国产在热久久无码| 亚洲一区精品无码| 久久久久久国产精品无码下载 | 国产精品无码一区二区三区免费 | 久久无码专区国产精品s| 亚洲AV无码一区二区三区牲色 | AV无码久久久久不卡网站下载| 无码人妻一区二区三区免费视频| 亚洲aⅴ无码专区在线观看| 国产午夜片无码区在线播放| 亚洲中久无码不卡永久在线观看| 无码H肉动漫在线观看| 亚洲情XO亚洲色XO无码| 国产成人无码A区在线观看视频 | 日韩人妻精品无码一区二区三区 | 国产做无码视频在线观看浪潮| 国产乱人伦无无码视频试看| 中文字幕人成无码免费视频| 无码国内精品久久人妻| 亚洲欧洲日产国码无码网站| 久久亚洲AV无码西西人体| 无码任你躁久久久久久久 | 亚洲中文字幕不卡无码| 国产免费无码一区二区| 国产AV无码专区亚洲AV男同| 久久久久亚洲av无码专区| 国产精品无码无卡在线播放 | 亚洲AV永久无码精品一百度影院| 亚洲?V无码成人精品区日韩|