时间:2022年3月29日;
问题:tmss数据源切换完成后,源表数据将HBase集群内节点的存储空间撑爆,导致HBase集群内节点拒绝服务;
修复:
- 查询HDFS占用空间情况:
hdfs dfs -df -h
; - 确认是否是HBase表占用的空间比较大:
hdfs dfs -du -s -h /apps/hbase/data/data/default/
; - 如果是,查出占用空间最大的10张表:
hdfs dfs -du /apps/hbase/data/data/default/ |sort -n |tail -10
; - 检查写这些表的任务最近是否有改动,或占用空间增长速度异常;
- 恢复/停止有关任务调度;
- 删除空间占用大 & 可尽快恢复 & 业务优先级低) 的表$TAB2DEL:
a. 优先使用hbase shell命令清空表:truncate $TAB2DEL
;
b. 如果hbase shell因为硬盘爆满已经无法执行命令清空表,只能手动从hdfs删除:hdfs dfs -rm /apps/hbase/data/data/default/$TAB2DEL
(谨慎使用,这种方法删除得并不干净,可能会引发其它莫名其妙的bug); - 空间释放后,理想情况下服务应该会逐渐恢复;
- 如果15min后还未恢复,可以在界面上尝试重启HBase服务:
- 起来后如果HBase Master都是Standby状态,考虑可能HBase Region Server启动失败:
a. 找到Region Server的日志文件find / -name '*regionserver*.log'
b. 找到Region Server的日志文件find / -name '*regionserver*.log'
c. 检查日志,看到重复打印告警日志:
d.2022-03-29 13:18:36,600 INFO [regionserver/SHA1000177455:16020] regionserver.HRegionServer: reportForDuty to master=sha1000177440.huawei.com,16000,1648528543002 with port=16020, startcode=1648528545679
e.2022-03-29 13:18:36,601 WARN [regionserver/SHA1000177455:16020] regionserver.HRegionServer: reportForDuty failed; sleeping and then retrying.
f. 是WAL日志太多导致Master启动失败,可以通过清理日志+重启HBase服务解决:hdfs dfs -rm -r /apps/hbase/data/MasterProcWALs/pv*;参考 - 由于HBase挂死了一天,可能是积累了很多数据同步任务,导致调用队列溢出报错:ERROR: Call queue is full on sha1000177440.huawei.com,16000,1648456409137, too many items queued ?,考虑重启所有调度任务datalink、调度框架azkaban以及Hbase服务,清空调用队列;
至此,HBase明显的异常都得以解决,中间还遇到一些其它问题也顺便解决了