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数据备份到异地。