hbase Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.ThreadFactoryBu

本文记录了一次HBase启动失败的问题排查过程,故障表现为启动时出现ClassNotFoundException错误,最终定位为jar包版本冲突,并给出了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天启动hbase报错,停止hbase没有问题,但是启动的时候一直报错,以为zookeper挂了,结果发觉正常也没有其他错误就一个错误:

java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster

at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:1177)
at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:143)
at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:102)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:76)
at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:1190)
Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.ThreadFactoryBuilder
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.hadoop.hbase.ipc.HBaseServer$Listener.<init>(HBaseServer.java:280)
at org.apache.hadoop.hbase.ipc.HBaseServer.<init>(HBaseServer.java:1181)
at org.apache.hadoop.hbase.ipc.HBaseRPC$Server.<init>(HBaseRPC.java:568)
at org.apache.hadoop.hbase.ipc.HBaseRPC.getServer(HBaseRPC.java:520)
at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:202)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:1172)

... 5 more

然后各种查资料,但是都没有类似的错误,于是各种找,首先找到了com.google.common.util.concurrent.ThreadFactoryBuilder类是guava下的类,在hbase中也能找到guava-r06.jar,以为是版本低了,然后弄了个高版本guava-r09.jar还是不行,然后又各种找,后来想到了可能是jar包冲突了,然后找到了JAVA_HOME目录下的/jre/lib/ext目录下果然发现了一个低版本的guava-r03.jar才知道原来是这个问题,后面把这个低版本的删除了,把hbase中的guava开头的jar包拷贝到前面的ext目录,顺利搞定,做一个记录,以免再掉坑里。记得hadoop hive zookerper hbase都是依赖于java编译环境,如果有jar包拷贝,最好看下版本是否有冲突。

### HBase 中 `InvocationTargetException` 的原因及解决方案 #### 一、异常概述 在 Java 调用 HBase 过程中,可能会遇到 `java.lang.reflect.InvocationTargetException` 异常。该异常通常是由底层方法调用失败引发的反射机制错误[^1]。 --- #### 二、常见原因分析 1. **JDK 版本不兼容** 如果使用的 JDK 版本与 HBase 所需版本不符,则可能导致此类异常。例如,在 IDEA 开发环境中,如果项目配置了较高版本的 JDK(如 JDK 11),而 HBase 需要较低版本(如 JDK 1.8),则可能触发此问题[^2]。 2. **Maven 依赖冲突** 当 Maven 工程中的依赖项顺序不当或存在重复导入时,也可能导致异常。具体来说,如果 `hdfs-client` 的引入优先级低于 `hbase-client`,那么前者可能会被后者覆盖,从而引起运行时错误[^3]。 --- #### 三、解决方法 1. **调整 JDK 版本** - 在开发工具(如 IntelliJ IDEA)中确认当前项目的 JDK 设置是否满足 HBase 官方文档的要求。 - 方法:右键点击项目 -> 按下 F4 键进入模块设置界面 -> 修改 Project SDK 和 Module SDK 至目标版本(通常是 JDK 1.8)。完成后重新构建项目并测试连接功能。 2. **优化 Maven 依赖管理** - 确保 `pom.xml` 文件内的依赖声明遵循正确的加载次序。以下是推荐的依赖写法: ```xml <dependencies> <!-- hdfs-client 应放在前面 --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs-client</artifactId> <version>3.x.x</version> </dependency> <!-- 后面才是 hbase-client --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>2.x.x</version> </dependency> </dependencies> ``` - 此外,建议通过命令行执行以下操作来验证是否存在潜在冲突: ```bash mvn dependency:tree | grep -E &#39;hbase|hadoop&#39; ``` 3. **排查其他环境因素** - 若上述措施仍无法解决问题,可以尝试清理本地缓存文件夹 `.m2/repository/` 下的相关 jar 包后再重试下载;或者切换至纯净的工作目录以排除外部干扰源的影响。 --- ### 总结 针对 `java.lang.reflect.InvocationTargetException` 异常,主要应关注 JDK 兼容性和 Maven 构建脚本两方面内容。合理调整这些参数能够有效降低发生概率,并提升系统的稳定性表现。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值