Chr*_*Joo 5 hadoop hbase protocol-buffers
我正在用kafka,spark stream和hbase开发Java应用程序。通过maven全新安装编译代码后,在运行应用程序时遇到以下错误:
尽管我已经在此站点上检查并应用了先前的答案,但我仍然遇到了问题。
谢谢 ...
`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)
Run Code Online (Sandbox Code Playgroud)
`
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)
Run Code Online (Sandbox Code Playgroud)
Apache Hadoop 2.7.3 依赖于 Protobuf 2.5.0。查看 Protobuf 2.5.0 的源代码,该类com.google.protobuf.LiteralByteString在此处可见:
但是,该类在 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 时,可能有东西在运行时覆盖了类路径。
| 归档时间: |
|
| 查看次数: |
2596 次 |
| 最近记录: |