KaaPexei 发表于 2022-12-21 16:21

【HBASE报错】Spring整合HBASE报错NoClassDefFoundError

【问题描述】


Spring整合HBASE报错:
org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.NoClassDefFoundError: com/google/protobuf/LiteralByteString    at org.apache.hadoop.hbase.client.RpcRetryingCaller.translateException(RpcRetryingCaller.java:241)    at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:214)    at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:364)    at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:338)    at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:137)    at org.apache.hadoop.hbase.client.ResultBoundedCompletionService$QueueingFuture.run(ResultBoundedCompletionService.java:65)    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)    at java.lang.Thread.run(Thread.java:748)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)    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)    at java.security.AccessController.doPrivileged(Native Method)    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)    at org.apache.hadoop.hbase.util.ByteStringer.<clinit>(ByteStringer.java:44)    at org.apache.hadoop.hbase.protobuf.RequestConverter.buildRegionSpecifier(RequestConverter.java:1041)    at org.apache.hadoop.hbase.protobuf.RequestConverter.buildScanRequest(RequestConverter.java:492)    at org.apache.hadoop.hbase.client.ScannerCallable.openScanner(ScannerCallable.java:399)    at org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:211)    at org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:65)    at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:212)    ... 7 moreCaused by: java.lang.ClassNotFoundException: com.google.protobuf.LiteralByteString    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)    ... 26 more原因&措施


§ 查看依赖类:protobuf,发现其中无方法LiteralByteString:


Maven查看到我们依赖的protobuf版本为:3.14.0,他源自我们pom中导入的hbase-server 1.3.11


尝试降低hbase-server的版本,2.6.1及以下的protobuf-java是有LiteralByteString的      <!--HBase服务器依赖-->      <dependency>            <groupId>org.apache.hbase</groupId>            <artifactId>hbase-server</artifactId>            <version>1.3.1</version>            <!--hbase-server依赖的protobuf-java版本过高,会导致报错:NoClassDefFoundError: com/google/protobuf/LiteralByteString-->            <exclusions>                <exclusion>                  <artifactId>protobuf-java</artifactId>                  <groupId>com.google.protobuf</groupId>                </exclusion>            </exclusions>      </dependency>      <!--HBase客户端依赖-->      <dependency>            <groupId>org.apache.hbase</groupId>            <artifactId>hbase-client</artifactId>            <version>1.3.1</version>            <exclusions>                <exclusion>                  <artifactId>protobuf-java</artifactId>                  <groupId>com.google.protobuf</groupId>                </exclusion>            </exclusions>      </dependency>      <!-- 手动导入低版本的protobuf-java依赖 -->      <dependency>            <groupId>com.google.protobuf</groupId>            <artifactId>protobuf-java</artifactId>            <version>2.6.1</version>      </dependency>
查看依赖树


查看protobuf类


重新测试,通过
页: [1]
查看完整版本: 【HBASE报错】Spring整合HBASE报错NoClassDefFoundError