HBase存储空间撑爆导致拒绝服务的问题解决思路与操作方法记录
问题描述
源表数据将HBase集群内节点的存储空间撑爆,导致HBase集群内节点拒绝服务;
思路
筛选出没用且占用空间最大的n张表,通过hbase client删除。
修复步骤
- 查询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
(这种方法并没有删干净,参考HBase Regions In Transition(RIT)问题解决思路及操作方法); - 空间释放后,理想情况下服务应该会逐渐恢复;
- 如果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明显的异常都得以解决,中间还遇到一些其它问题也顺便解决了
总结
hbase磁盘满了,不建议直接通过hdfs命令删除,能扩容最好,扩容之后再通过hbase shell清理掉一些不用的表,直接删除操作比较危险,因为你只删除了表的数据,meta表中存的元数据都还在;这次直接删除就导致RIT问题的出现,但是这个问题并没有第一时间被发现,后续发生了表region出现了RIT问题,记录:HBase Regions In Transition(RIT)问题解决思路及操作方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-03-02 搭建 Digital Ocean 服务器