HBase在CentOS中的故障排查指南
HBase的日志是故障诊断的核心依据,日志文件通常位于/var/log/hbase/
目录下(如hbase-*-master-*.log
、hbase-*-regionserver-*.log
)。通过查看日志中的错误堆栈(如ERROR
级别信息)、警告信息(如WARN
级别信息),可快速定位问题根源(如端口冲突、ZooKeeper连接失败、数据目录权限问题等)。
使用jps
命令查看HBase关键进程是否运行:HMaster
(主节点)、HRegionServer
(Region服务器)。若进程未运行,可能是启动脚本失败、依赖服务未启动或配置错误。可通过systemctl status hbase
(若使用systemd)或service hbase status
命令进一步确认服务状态。
重点检查以下配置文件的参数:
hbase-site.xml
:确保hbase.cluster.distributed
(分布式模式需设为true
)、hbase.rootdir
(HDFS路径,如hdfs://namenode:9000/hbase
)、hbase.zookeeper.quorum
(ZooKeeper集群地址)等关键参数设置正确;hbase-env.sh
:确认JAVA_HOME
(指向正确的Java安装路径,如/usr/lib/jvm/java-1.8.0-openjdk
)、HBASE_HOME
(HBase安装目录)等环境变量配置无误;core-site.xml
(Hadoop配置):确保fs.defaultFS
(HDFS NameNode地址)与hbase.rootdir
一致。HBase依赖网络通信,需检查:
ping
命令测试HBase节点(Master、RegionServer)之间的网络连通性;netstat -anp | grep <端口号>
或ss -tulnp | grep <端口号>
检查HBase关键端口(如HMaster的60000
、RegionServer的16020
、ZooKeeper的2181
)是否开放,是否被其他进程占用(若有占用,可通过kill -9 <PID>
终止占用进程或修改HBase配置文件中的端口号)。HBase依赖ZooKeeper进行协调管理,需通过zkCli.sh
工具检查ZooKeeper状态:
./zkCli.sh -server localhost:2181 # 连接到ZooKeeper
ls /hbase # 检查HBase在ZooKeeper中的节点是否存在
若ZooKeeper未运行,需启动ZooKeeper服务(systemctl start zookeeper
);若节点数据异常,可能需要清理ZooKeeper中的HBase节点(需谨慎操作,建议先备份)。
free -h
查看系统内存使用情况,确保HBase有足够内存(hbase.regionserver.global.memstore.size
通常设置为堆内存的40%以内);df -h
查看HDFS数据目录(hbase.rootdir
)所在磁盘的剩余空间(建议保留20%以上),使用du -sh /hbase/*
查看HBase数据目录大小,清理过期数据(如hbase shell
中执行delete 'table_name', 'row_key'
);top
或htop
查看CPU使用率,避免因CPU过载导致HBase响应缓慢。hbase-site.xml
中的参数是否正确(如hbase.rootdir
路径是否存在、hbase.cluster.distributed
是否与部署模式匹配),修正错误后重启HBase;netstat
命令找到占用端口的进程,终止该进程或修改HBase配置文件中的端口号(如将60000
改为60021
),并更新hbase-site.xml
;HBASE_HEAPSIZE
设置为物理内存的50%-70%);systemctl status zookeeper
),确保其正常运行;若ZooKeeper节点数据异常,可使用rmr /hbase
清理HBase节点(需提前备份)。OutOfMemoryError
信息,调整hbase.regionserver.handler.count
(增加处理线程数)、hbase.regionserver.global.memstore.size
(减小MemStore大小)等参数,或增加RegionServer内存;jstat -gcutil <PID>
查看GC情况,若Full GC耗时过长,调整JVM垃圾收集器(如使用G1GC:-XX:+UseG1GC
),并设置-XX:MaxGCPauseMillis=200
(目标最大GC停顿时间);hbase shell
的scan 'hbase:meta'
查看Region分布,若某个Region过大(hbase.hregion.max.filesize
默认10GB,可根据数据量调整),使用split
命令手动分裂Region(如split 'table_name', 'row_key'
);hbase.regionserver.blockcache.size
(设置为堆内存的30%-40%),增加BlockCache大小,减少磁盘IO;hbase.hstore.compaction.ratio
从1.2调整为1.5,减少不必要的合并),或在低峰期执行Major Compaction(major_compact 'table_name'
)。hbase.zookeeper.quorum
参数是否正确(如localhost
或ZooKeeper集群地址),使用zkCli.sh
确认ZooKeeper服务可用,检查防火墙是否阻止了ZooKeeper端口(2181
);60000
、16020
),使用telnet <HBase_Master_IP> 60000
测试端口连通性。