记一次protobuf和hbase自带protobuf版本冲突的解决
Posted niutao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次protobuf和hbase自带protobuf版本冲突的解决相关的知识,希望对你有一定的参考价值。
使用protobuf生产模板代码,使用的版本是:
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.6.1</version> </dependency>
hbase的版本是:1.2.1-cdh5.1.4.0
如果打印maven依赖树的话,可以看到hbase的protobuf版本是2.5.0
这种情况下打包不会报错,但是一旦运行就会出错:
java.lang.ClassNotFoundException: com.google.protobuf.LiteralByteString
那么应该咱么解决?
答案是想办法向下兼容~ , 就是保留高版本,去除低版本
最终做法是在maven中去掉低版本相关依赖,以我的作为例子:
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>$hbase.version-$cdh.version</version> <exclusions> <exclusion> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> </exclusion> <exclusion> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> </exclusion> <exclusion> <groupId>org.apache.hbase</groupId> <artifactId>hbase-protocol</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>$hbase.version-$cdh.version</version> <exclusions> <exclusion> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> </exclusion> <exclusion> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> </exclusion> <exclusion> <groupId>org.apache.hbase</groupId> <artifactId>hbase-protocol</artifactId> </exclusion> </exclusions> </dependency>
以上是关于记一次protobuf和hbase自带protobuf版本冲突的解决的主要内容,如果未能解决你的问题,请参考以下文章
记一次HBase RegionServer 经常挂掉 故障排查过程
记一次测试环境Hbase数据备份恢复以及恢复后部分表无法删除的问题处理
记一次 spark rdd 写数据到 hbase 报 NPE 的问题排查