Protobuf Error : Hbase createTable & put in java code(protobuf-LiteralByteString)

Protobuf Error : Hbase createTable & put in java code(protobuf-LiteralByteString)

我正在使用 kafka、spark stream 和 hbase 开发 java 应用程序。 在我通过 maven clean install 编译代码后,当我 运行 我的应用程序时,我遇到了以下错误:

虽然我已经检查并应用了本网站之前的答案,但我仍然遇到了问题。

谢谢...

`Exception in thread "main" org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.NoClassDefFoundError: com/google/protobuf/LiteralByteString
at org.apache.hadoop.hbase.client.RpcRetryingCaller.translateException(RpcRetryingCaller.java:225)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:133)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:101)
at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:289)
at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:190)
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:185)
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:111)
at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:789)
at org.apache.hadoop.hbase.catalog.MetaReader.fullScan(MetaReader.java:542)
at org.apache.hadoop.hbase.catalog.MetaReader.tableExists(MetaReader.java:310)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:317)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:331)

`

Caused by: java.lang.NoClassDefFoundError: com/google/protobuf/LiteralByteString
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access0(URLClassLoader.java:73)
at java.net.URLClassLoader.run(URLClassLoader.java:368)

Apache Hadoop 2.7.3 依赖于 Protobuf 2.5.0。查看 Protobuf 2.5.0 的源代码,可以在此处看到 class com.google.protobuf.LiteralByteString

https://github.com/google/protobuf/blob/v2.5.0/java/src/main/java/com/google/protobuf/LiteralByteString.java

但是,此 class 在 Protobuf 的更高版本中不存在。比如这里是最近的3.1.0版本中的com/google/protobuf目录:

https://github.com/google/protobuf/tree/v3.1.0/java/core/src/main/java/com/google/protobuf

基于此,您的应用程序可能选择了 2.5.0 以外的 Protobuf 版本并将其放在 class 路径中。我建议在您的应用程序上使用 运行 mvn dependency:tree 来查看它是否正在获取不兼容的 Protobuf 依赖项(可能是传递性的)。如果它在您的应用程序的 Maven 依赖项中看起来不错,那么当您启动应用程序并选择错误版本的 Protobuf 时,可能有什么东西在运行时覆盖了 class 路径。