HBase故障排查指南(CentOS环境)
首先需要清晰识别HBase集群的具体问题,常见表现包括:服务完全不可用(如无法连接)、读写延迟显著升高、RegionServer频繁宕机、Region无法正常上线、HMaster初始化失败等。准确的故障定位是后续排查的基础。
HBase的日志是故障排查的“黄金线索”,关键日志路径及内容如下:
/var/log/hbase/目录下(若自定义路径需检查hbase-site.xml中的hbase.log.dir参数)。hbase-*-master-*.log:记录HMaster的启动、运行及错误信息(如Region分配、元数据操作);hbase-*-regionserver-*.log:记录RegionServer的读写请求、Region状态及GC情况。ERROR、WARN关键字,关注NullPointerException、SocketTimeoutException、RegionAlreadyAssignedException等典型异常。使用jps命令确认HBase核心进程是否正常运行:
jps
HMaster(主节点)和至少一个HRegionServer(Region服务器)进程;HBase的关键配置文件需重点检查,确保参数正确:
hbase-site.xml:
hbase.cluster.distributed:分布式部署必须设为true;hbase.rootdir:指向正确的HDFS路径(如hdfs://namenode:9000/hbase);hbase.zookeeper.quorum:列出所有ZooKeeper节点IP(如node1,node2,node3);hbase.master.port/hbase.regionserver.port:确认端口未被其他进程占用。hdfs-site.xml:确保HDFS配置与HBase兼容(如dfs.replication设为2或3,避免数据冗余过高)。使用系统命令检查资源瓶颈:
top(按P键排序CPU占用)、htop(更直观的实时监控);free -h(查看总内存、已用内存、Swap使用情况)、jstat -gc <pid>(分析RegionServer的GC频率及耗时);df -h(检查HDFS数据目录所在磁盘的剩余空间,建议保留20%以上)、du -sh /var/log/hbase/(查看日志文件大小,避免日志占满磁盘)。ping测试节点间网络是否可达(如ping node2),traceroute追踪路由路径;netstat -anp | grep <port>(如60000为HMaster端口、16020为RegionServer端口)检查端口是否监听,或telnet <ip> <port>验证端口是否开放;zkCli.sh -server localhost:2181),执行ls /hbase查看HBase的ZooKeeper节点是否存在,stat /hbase检查节点状态是否正常。hbase hbck:检查集群一致性(如Region分配、元数据完整性),修复命令示例:hbase hbck -fixAssignments # 修复未分配的Region
hbase hbck -fixMeta # 修复元数据不一致
hbase shell:通过命令快速诊断集群状态:
status 'detailed':查看集群详细状态(包括Region数量、RegionServer分布);count 'table_name':统计表的行数(验证表是否可访问);list:列出所有表(确认表是否存在)。hbase-site.xml中的hbase.cluster.distributed是否为true;hbase.unsafe.stream.capability.enforce设为false(避免Hadoop 3.x兼容性问题);hdfs dfsadmin -report)。/var/log/messages、/var/log/secure)是否有OutOfMemoryError(OOM),若有则增加RegionServer内存(hbase.regionserver.handler.count调整线程数);-XX:+PrintGCDetails),若GC停顿时间过长,启用G1GC(-XX:+UseG1GC)优化。hbase.zookeeper.session.timeout默认30秒,可调整为60秒);zkServer.sh status),避免脑裂问题。若故障与性能相关,可采取以下优化措施:
Splits,如create 'table', 'cf', SPLITS => ['1','2','3'])、调整BlockCache大小(hbase.regionserver.blockcache.size设为堆内存的30%-50%)、启用OffHeap缓存(hbase.offheapcache.percentage设为20%-30%,减少GC压力);