Protobuf(全称 Protocol Buffers)是 Google 开发的一种数据描述语言,能够将结构化数据序列化,可用于数据存储、通信协议等方面。在 HBase 里面用使用了 Protobuf 的类库。

版本:
HBase:1.3.1
MySQL:8.0.13

错误报告

org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.NoClassDefFoundError: com/google/protobuf/LiteralByteString

原因分析
运行mvn dependency:tree后发现MySQL8.0.13中有com.google.protobuf:protobuf-java:jar:3.6.1:compile。

查看了3.6.x的protobuf 的源码,里面并没有LiteralByteString这个类。
https://github.com/protocolbuffers/protobuf/tree/3.6.x/java/core/src/main/java/com/google/protobuf

查看了2.6.1及以下版本的protobuf 的源码,里面存在LiteralByteString这个类。
https://github.com/google/protobuf/blob/v2.5.0/java/src/main/java/com/google/protobuf/LiteralByteString.java

解决方法尝试
将maven中的MySQL8.0.13的引入注释掉或MySQL版本换成低版本,如5.0.7,可以正常运行。

原因猜测
应用程序已经获得了另外一个版本的Protobuf(如3.6.1)并将其放在类路径中。建议在应用程序上运行mvn dependency:tree以查看它是否正在拾取不兼容的Protobuf依赖项(可能是传递性的)。如果应用程序的Maven依赖关系看起来很好,那么当你启动应用程序并拾取一个不正确的Protobuf版本时,可能是在运行时重载了类路径。

解决办法
1、降低protobuf版本(实操可用)

<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>2.5.0</version>
</dependency>

2、将客户端的Protobuf类库重命名(尝试了下还是不行,应该是我本身项目哪还有问题)

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<relocations>
<relocation>
<pattern>com.google.protobuf</pattern>
<shadedPattern>com.fazi.google.protobuf</shadedPattern>
</relocation>
</relocations>
</configuration>
</plugin>
</plugins>
</build>

3、使用hbase-shaded-client(实操可用)
hbase-shaded-client是社区里有人将HBase里面比较常见的依赖进行了重命名,在pom文件中我们可以将引入的hbase-client替换成hbase-shaded-client

<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-shaded-client</artifactId>
<version>1.3.1</version>
</dependency>

参考地址:
https://stackoverflow.com/questions/41734330/protobuf-error-hbase-createtable-put-in-java-codeprotobuf-literalbytestring
https://www.iteblog.com/archives/2463.html
---------------------
作者:发孖、
来源:CSDN
原文:https://blog.csdn.net/xcf111/article/details/86692591
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. Enable Cross-Origin Requests in Asp.Net WebApi 2[Reprint]
  2. [Android Tips] 5. INSTALL_PARSE_FAILED_MANIFEST_MALFORMED on Android-2.1
  3. Java EE注册三部曲(一步曲)
  4. Android中ListView 控件与 Adapter 适配器如何使用?
  5. HDU 4635:Strongly connected(强连通)
  6. 前台页面Josn 数组在后台.cs代码中的解析
  7. PIN的经验和技巧
  8. [置顶] android AIDL 进程间通信
  9. [河南省ACM省赛-第三届] 聪明的kk (nyoj 171)
  10. JDBC之组件封装
  11. Git &amp; github 使用指南
  12. 获取DOM节点的几种方式
  13. clickhouse在Linux上的安装部署
  14. linux centos 7 nodejs 的安装
  15. 【Java】SpringBoot配置文件读取中文乱码
  16. JAVA Aes加解密详解
  17. python全栈开发知识点补充for else和while else如果不是除正常以外的其他方式退出循环,那么else语句就会被执行。
  18. SAP FI CO模块常用事务代码
  19. Kubernetes DNS 高阶指南(转发别人 解析很详细)
  20. Office CVE-2017-8570远程代码执行漏洞复现

热门文章

  1. Quartz时SLF4J错误
  2. 和菜鸟一起学android4.0.3源码之硬件gps简单移植【转】
  3. 玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
  4. Python爬虫 —— 抓取美女图片(Scrapy篇)
  5. 算法(Algorithms)第4版 练习 1.3.8
  6. 维特比算法(Viterbi)
  7. hdu-5805 NanoApe Loves Sequence(线段树+概率期望)
  8. ACM学习历程——POJ 1700 Crossing River(贪心)
  9. 【Lintcode】094.Binary Tree Maximum Path Sum
  10. bzoj 4753 [Jsoi2016]最佳团体——0/1分数规划