Protobuf错误:Hbase createTable&放入java代码(protobuf-LiteralByteString)

时间:2017-01-19 05:23:27

标签: hadoop hbase protocol-buffers

我正在使用kafka,spark stream& amp; HBase的。 在我通过maven clean install编译代码之后,当我运行我的应用程序时,我遇到了以下错误:

  • hadoop ver:2.7.3
  • HBase ver:hbase-0.98.24-hadoop2
  • Spark:2.1.0

虽然我已经检查过&在本网站上应用了以前的答案,我仍然遇到了问题。

谢谢...

`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.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)

1 个答案:

答案 0 :(得分:3)

Apache Hadoop 2.7.3依赖于Protobuf 2.5.0。查看Protobuf 2.5.0的源代码,这里可以看到类com.google.protobuf.LiteralByteString

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

但是,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版本并将其放在类路径上。我建议在您的应用程序上运行mvn dependency:tree以查看它是否正在获取不兼容的Protobuf依赖项(可能是可传递的)。如果它在您的应用程序的Maven依赖项中看起来很好,那么当您启动应用程序并选择不正确的Protobuf版本时,可能会在运行时覆盖类路径。