我的 HBase 故障排查日记:从绝望到成功的一天
今天是我与 HBase 斗争的一天,也是一次从挫折到突破的技术之旅。早上当我尝试启动 HBase 时,遭遇了一系列令人困惑的问题,最终通过系统性的排查找到了解决方案。
问题初现
一切始于一个简单的命令:start-hbase.sh。终端显示服务正在启动,但 jps 检查时却发现只有 HQuorumPeer 在运行,关键的 HMaster 和 HRegionServer 进程神秘失踪。更奇怪的是,日志文件只显示了系统资源限制信息,完全没有 HBase 自身的启动日志。
排查过程
我首先检查了基本的配置:
• 确认 Java 环境正确(Java 8)
• 验证 HDFS 正常运行
• 检查 ZooKeeper 状态正常
但问题依然存在。于是我开始深入排查:
第一轮尝试:直接运行 bin/hbase master start,但只看到使用说明,没有实际启动。
第二轮尝试:检查类路径,发现缺少关键依赖。手动添加了 htrace-core 和其他必要库。
第三轮尝试:解决了 SLF4J 绑定冲突,移除了 Hadoop 中的重复绑定。
突破时刻
真正的突破来自当我决定在前台手动启动 HMaster 并捕获详细输出:
bin/hbase master start 2>&1 | tee /tmp/hmaster-debug.log
通过分析实时输出,我发现了一系列依赖缺失和配置问题。最终,通过以下步骤解决了问题:
- 解决依赖冲突:移除 Hadoop 中的 slf4j-reload4j,保留 HBase 的 slf4j-log4j12
- 添加缺失依赖:手动下载并添加 htrace-core、commons-configuration 等必要库
- 修复权限问题:确保日志目录有正确权限
- 清理环境:重置 ZooKeeper 和 HDFS 中的 HBase 数据
成功时刻
经过多次尝试,终于看到了成功的迹象:
• HMaster 和 HRegionServer 进程出现在 jps 输出中
• HBase Shell 能够正常连接并执行命令
• Web UI 可以正常访问