HBase故障排查Debian指南
使用jps命令查看HBase核心进程是否运行:jps | grep -E "HMaster|HRegionServer"。若未看到对应进程,说明服务未启动,需执行${HBASE_HOME}/bin/start-hbase.sh手动启动,并再次确认进程是否存在。
HBase日志默认存储在/usr/local/hbase/logs/(或自定义路径,参考hbase-site.xml中的hbase.log.dir配置)。使用tail -f命令实时查看日志,重点关注ERROR或WARN级别信息:
tail -f /usr/local/hbase/logs/hbase-<username>-master-<hostname>.log(HMaster日志)tail -f /usr/local/hbase/logs/hbase-<username>-regionserver-<hostname>.log(RegionServer日志)Connection refused(ZooKeeper连接失败)、Permission denied(目录权限问题)、Address already in use(端口冲突)。检查conf/hbase-site.xml(HBase核心配置)和conf/hbase-env.sh(环境变量配置)的关键参数:
hbase.rootdir:需指向有效的HDFS路径(如hdfs://namenode:8020/hbase),确保HDFS服务正常且路径可访问;hbase.cluster.distributed:分布式模式下必须设置为true;JAVA_HOME:在hbase-env.sh中正确设置(如export JAVA_HOME=/usr/lib/jvm/default-java),确保Java版本兼容(推荐OpenJDK 8/11)。HBase依赖ZooKeeper和HDFS,需确保二者正常运行:
jps查看QuorumPeerMain进程是否存在;通过echo stat | nc <zookeeper-host> 2181测试连接,若返回Mode: leader/follower则表示正常;hdfs dfsadmin -report确认NameNode和DataNode状态正常,且/hbase目录存在(需用hdfs dfs -mkdir -p /hbase创建,权限设为755)。ping测试HBase节点间(如Master与RegionServer)的网络连接,确保无丢包;netstat -tuln | grep <port>或lsof -i :<port>检查HBase默认端口(如Master的16000、RegionServer的16020、Web UI的16010)是否被占用。若冲突,修改hbase-site.xml中的端口配置(如<property><name>hbase.master.port</name><value>16001</value></property>)并重启服务。hbase-env.sh中的JVM内存参数,增加RegionServer堆内存(如export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xms8G -Xmx8G");优化写入批量大小(hbase.client.write.buffer,默认2MB,可根据集群负载调整至4-8MB);OutOfMemoryError或StackOverflowError,调整GC策略(如添加-XX:+UseG1GC)或增加节点分担负载。若HMaster日志中出现Could not connect to ZooKeeper,需检查:
jps | grep QuorumPeerMain);hbase-site.xml中的hbase.zookeeper.quorum配置是否正确(如<property><name>hbase.zookeeper.quorum</name><value>zk1,zk2,zk3</value></property>);hbase.zookeeper.property.dataDir)的权限(需属于hbase用户)。若HBase日志中出现Permission denied(如无法访问/hbase目录),需修改HDFS目录权限:
hdfs dfs -chown -R hbase:hadoop /hbase # 将/hbase目录所有者改为hbase用户
hdfs dfs -chmod -R 755 /hbase # 设置目录权限为755
修改后重启HBase服务。
使用top、free、df等命令监控系统资源:
free -h查看剩余内存,避免因内存不足导致进程被OOM Killer终止);df -h查看HDFS和本地磁盘空间(需预留20%以上空闲空间,避免因磁盘满导致写入失败);top查看CPU占用(若某进程占用过高,需优化配置或增加节点)。hbase snapshot '表名', '快照名';恢复快照:hbase snapshot restore '快照名');/usr/local/hbase/data)中查找对应的.hfile文件,使用hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles工具恢复;hbase org.apache.hadoop.hbase.backup.util.BackupUtils工具备份数据,恢复时指定备份目录即可。