Hbase连接异常,JAR包冲突解决攻略

来源:互联网 发布:淘宝量子恒道作用 编辑:程序博客网 时间:2024/06/06 01:44

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

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

1 0
原创粉丝点击