Debian上HBase故障排查技巧
通过jps命令查看HMaster、HRegionServer等核心进程是否运行。若进程不存在,尝试手动启动服务(./start-hbase.sh),并根据启动结果定位问题(如进程崩溃或未启动)。
HBase日志是故障排查的核心依据,关键日志路径包括:
/var/log/hbase/hbase-<username>-master-<hostname>.log/var/log/hbase/hbase-<username>-regionserver-<hostname>.logtail -f实时查看日志,关注端口冲突(如“Could not bind to address”)、ZooKeeper连接失败(如“Connection refused”)、HDFS目录权限问题(如“Permission denied”)等关键错误信息。重点检查以下配置文件的参数:
hbase-site.xml:确认hbase.rootdir(HDFS数据目录,如hdfs://namenode:9000/hbase)、hbase.zookeeper.quorum(ZooKeeper集群地址,如zk1,zk2,zk3)、hbase.cluster.distributed(是否为分布式模式,需设为true)等参数是否正确。hbase-env.sh:调整JVM内存参数(如HBASE_MASTER_OPTS、HBASE_REGIONSERVER_OPTS,建议初始设置为-Xms4G -Xmx4G),避免内存溢出。HBase依赖ZooKeeper和HDFS,需确保二者正常运行:
jps查看QuorumPeerMain进程是否存在;通过zkCli.sh -server zk_host:2181连接ZooKeeper,执行ls /hbase确认/hbase节点存在(HBase元数据存储于此)。jps查看NameNode、DataNode进程;执行hdfs dfsadmin -report检查集群健康状态,确保存储空间充足(剩余空间建议大于总容量的20%)。ping测试节点间网络连通性(如HMaster与RegionServer、HBase与ZooKeeper之间的网络);使用traceroute定位网络中断点。netstat -tuln或lsof -i :<port>检查HBase关键端口(如HMaster的16000、16010端口,RegionServer的16020、16030端口)是否被占用。若端口被占用,停止占用进程或修改hbase-site.xml中的端口配置。hbase.zookeeper.session.timeout参数,默认30秒,可适当增大)。hbase hbck -details <表名>检查Region分配状态,若存在FAILED_OPEN状态的Region,执行hbase hbck -fixAssignments修复;若Region未分配,手动分配assign '<RegionID>'。hbase.regionserver.handler.count(处理请求的线程数,建议设置为CPU核心数的2倍)、hbase.hregion.memstore.flush.size(MemStore刷写阈值,默认128MB,可根据数据量调整)、hbase.regionserver.global.memstore.size(全局MemStore大小,默认40%,避免过大导致阻塞)。hfile.block.cache.size(Block Cache大小,默认40%,提高热点数据命中率)、hbase.regionserver.scan.cacheblock(Scan操作缓存块,建议开启)、hbase.regionserver.compaction.ratio(Compaction合并比例,建议设置为1.2~1.5,减少小文件数量)。hbase snapshot create '表名', '快照名'创建表快照(轻量级备份);恢复时执行hbase snapshot restore '快照名'。hbase hbck -fixHdfsOrphans修复Orphaned HFiles(孤立的HFile文件);定期备份HDFS数据(如使用hdfs dfs -cp复制数据到其他存储路径)。