设为首页 加入收藏

TOP

Hbase连接异常,JAR包冲突解决攻略
2019-02-12 01:48:09 】 浏览:214
Tags:Hbase 连接 异常 JAR 冲突 解决 攻略

Hbase连接异常(JAR包冲突)

1. 问题描述

用Maven管理Hbase jar包,遇到坑,程序启动就会报错:

[2016-10-27 15:17:12][ERROR][main][HbaseUtil.java:39 ][getHbaseConnection] java.io.IOException: java.lang.reflect.InvocationTargetException
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119) ~[hbase-client-1.1.2.jar:1.1.2]
…………
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[:1.7.0_75]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[:1.7.0_75]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[:1.7.0_75]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[:1.7.0_75]
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238) ~[hbase-client-1.1.2.jar:1.1.2]
    ... 7 more
Caused by: java.lang.VerifyError: class org.apache.hadoop.hbase.protobuf.generated.ClientProtos$Result overrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet;
    at java.lang.ClassLoader.defineClass1(Native Method) ~[:1.7.0_75]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) ~[:1.7.0_75]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[:1.7.0_75]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) ~[:1.7.0_75]
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) ~[:1.7.0_75]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) ~[:1.7.0_75]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[:1.7.0_75]
    at java.security.AccessController.doPrivileged(Native Method) ~[:1.7.0_75]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[:1.7.0_75]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) ~[:1.7.0_75]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[:1.7.0_75]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ~[:1.7.0_75]
    at org.apache.hadoop.hbase.protobuf.ProtobufUtil.<clinit>(ProtobufUtil.java:210) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:64) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:75) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:105) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:879) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:635) ~[hbase-client-1.1.2.jar:1.1.2]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[:1.7.0_75]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[:1.7.0_75]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[:1.7.0_75]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[:1.7.0_75]
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238) ~[hbase-client-1.1.2.jar:1.1.2]
    ... 7 more

还有这种错

[2016-10-27 15:17:12][ERROR][main][HbaseUtil.java:39 ][getHbaseConnection] java.io.IOException: java.lang.reflect.InvocationTargetException
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119) ~[hbase-client-1.1.2.jar:1.1.2]
…………
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[:1.7.0_75]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[:1.7.0_75]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[:1.7.0_75]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[:1.7.0_75]
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238) ~[hbase-client-1.1.2.jar:1.1.2]
    ... 7 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.protobuf.ProtobufUtil
    at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:64) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:75) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:105) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:879) ~[hbase-client-1.1.2.jar:1.1.2]
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:635) ~[hbase-client-1.1.2.jar:1.1.2]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[:1.7.0_75]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[:1.7.0_75]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[:1.7.0_75]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[:1.7.0_75]
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238) ~[hbase-client-1.1.2.jar:1.1.2]
    ... 7 more

2. 问题定位

看了就蒙了。但是有两个关键错误,java.io.IOException: java.lang.reflect.InvocationTargetException 和
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.protobuf.ProtobufUtil
问题就出在org.apache.hadoop.hbase.protobuf.ProtobufUtil,经历了网上各种搜索,基本确定就是jar包冲突导致的。

通过对jar包Dependency的分析,发现protobuf-java确实有两个版本,一个是2.4.1,一个是2.5.0。

3. 问题解决

问题定位了,如何解决呢?方法也很简单,将低版本的jar包管理里面,添加如下配置,屏蔽掉低版本jar包就可以了:

        <exclusions>
           <exclusion>
            <groupId>com.google.protobuf</groupId>
               <artifactId>protobuf-java</artifactId>
           </exclusion>
        </exclusions>

编译,重新运行,问题完美解决~

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hbase和hdfs的一些故事 下一篇GeoMesa-HBase部署实践

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目