Ubuntu上HBase故障恢复指南
在进行故障恢复前,需先通过以下工具定位具体问题:
$HBASE_HOME/logs/hbase-master.log)、HRegionServer($HBASE_HOME/logs/hbase-regionserver.log)的日志是定位故障的核心依据,可通过tail -f命令实时查看最新错误信息(如OutOfMemoryError表示内存不足,ConnectionLoss表示ZooKeeper连接问题)。/hbase/data)。可通过hdfs dfs -ls /hbase/data/default命令验证,若返回“Permission denied”,需调整HDFS权限。hbase-site.xml中的hbase.zookeeper.quorum配置(如zk1.example.com,zk2.example.com)是否正确,且ZooKeeper服务可用(通过zkCli.sh连接并执行ls /hbase/rs查看RegionServer注册状态)。hbase shell的status 'detailed'命令查看Region是否处于FAILED_OPEN(无法打开)或OFFLINE(离线)状态,定位具体故障Region。/hbase/WALs/目录恢复未提交的WAL日志(确保数据一致性)。bin/stop-hbase-regionserver.sh;-Xms4G -Xmx4G、解决网络问题);bin/start-hbase-regionserver.sh;hbase shell中执行assign 'region_name'(region_name可通过hbase shell status 'detailed'获取)。FAILED_OPEN状态,可使用hbase hbck工具修复: hbase hbck;hbase hbck -fixAssignments;hbase hbck -fixHdfsOrphans。zkCli.sh连接ZooKeeper集群,执行ls /验证服务是否正常;hbase-site.xml中的hbase.zookeeper.quorum和hbase.zookeeper.property.clientPort(默认2181)配置正确;zkServer.sh restart重启服务。hdfs dfsadmin -report查看HDFS集群状态,确保NameNode和DataNode正常运行;hdfs dfsadmin -safemode get返回ON),需执行hdfs dfsadmin -safemode leave强制退出;hdfs dfs -chmod -R 755 /hbase/data调整权限。slf4j-reload4j与log4j-slf4j-impl同时存在),需移除冲突的Jar包(如删除/usr/local/hadoop/share/hadoop/common/lib/slf4j-reload4j-*.jar或/usr/local/hbase/lib/client-facing-thirdparty/log4j-slf4j-impl-*.jar),并在hbase-env.sh中添加export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true。hbase-env.sh中增加RegionServer内存(如export HBASE_REGIONSERVER_OPTS="-Xms4G -Xmx4G"),并优化GC策略(如使用G1GC:-XX:+UseG1GC),避免长时间Full GC导致故障。hbase-site.xml中设置hbase.regionserver.replication为2或3,将Region副本分布在多个节点上,当某节点故障时,副本可立即接管服务。hbase-site.xml中设置hbase.regionserver.hlog.blocksize为更大的值(如134217728,128MB),并开启异步WAL(hbase.regionserver.asyncwal.enabled=true),减少WAL写入延迟,提高RegionServer性能。preSplit参数预分区(如create 'table1', 'cf', {NUMREGIONS => 10, SPLITALGO => 'HexStringSplit'}),避免单个Region过大导致恢复时间过长。hbase snapshot命令创建表快照(如hbase shell> snapshot 'table1', 'table1_snapshot'),或使用DistCp将HDFS上的HBase数据备份到异地。