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测试端口连通性。