HBase查询报错:java.lang.NoClassDefFoundError:org.apache.hadoop.hbase.util.ByteStringer

环境信息:

Hadoop 2.7.2+HBase 1.2.2

现象:

下午前端的同事使用scan查询HBase数据,代码执行到Table.getScanner(scan)方法时卡住了,无法返回结果直到超时,查看控制台,出现如下报错:java.lang.NoClassDefFoundError:org.apache.hadoop.hbase.util.ByteStringer

问题分析:

常规操作,这种情况下是因为jar包缺失或者jar包有问题造成的,但是一般情况下这种错误的概率比较小,毕竟有maven在,所以象征性的验证下hbase-protocol-1.2.2.jar是否存在,不出所料,果然在....

思索下,是不是缓存或者项目编译的问题?使用maven更新了下依赖顺带着重新编译了,再次触发查询,同样的问题,问题未解决....

虽然问题未解决,直觉应该还是maven引用的问题,回头继续排查pom文件,突然发现maven引用了一个protobuf-3.5.1的依赖,将此依赖去掉,问题解决!

问题总结:

在HBase 1.2.X版本及之前的版本HBase是强依赖于protobuf-2.5.0,如果在依赖中引入高版本的protobuf,会造成hbase的各种问题,所以在有HBase的项目中一定要慎重对待protobuf的版本

猜你喜欢

转载自blog.csdn.net/microGP/article/details/81705820
今日推荐