HBase存储空间撑爆导致拒绝服务的问题解决思路与操作方法记录

问题描述

源表数据将HBase集群内节点的存储空间撑爆,导致HBase集群内节点拒绝服务;

思路

筛选出没用且占用空间最大的n张表,通过hbase client删除。

修复步骤

  1. 查询HDFS占用空间情况:hdfs dfs -df -h
  2. 确认是否是HBase表占用的空间比较大:hdfs dfs -du -s -h /apps/hbase/data/data/default/
  3. 如果是,查出占用空间最大的10张表:hdfs dfs -du /apps/hbase/data/data/default/ |sort -n |tail -10
  4. 检查写这些表的任务最近是否有改动,或占用空间增长速度异常;
  5. 恢复/停止有关任务调度;
  6. 删除空间占用大 & 可尽快恢复 & 业务优先级低) 的表$TAB2DEL:
    a. 优先使用hbase shell命令清空表:truncate $TAB2DEL
    b. 如果hbase shell因为硬盘爆满已经无法执行命令清空表,只能手动从hdfs删除:hdfs dfs -rm /apps/hbase/data/data/default/$TAB2DEL(这种方法并没有删干净,参考HBase Regions In Transition(RIT)问题解决思路及操作方法);
  7. 空间释放后,理想情况下服务应该会逐渐恢复;
  8. 如果15min后还未恢复,可以在界面上尝试重启HBase服务:
  9. 起来后如果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)问题解决思路及操作方法

posted @   LexLuc  阅读(223)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-03-02 搭建 Digital Ocean 服务器
点击右上角即可分享
微信分享提示