HBase .oldlogs存储空间过多清理

一、问题描述

hbase的/hbase/.oldlogs存储空间占用过多,触发hbase-slave存储空间占用告警。在hbase-slave容器下查看.oldlog存储空间占用:

su hadoop
hdfs dfs -du -h /hbase

二、问题原因

2.1 涉及知识

HBase的Write-Ahead Log(WAL)主要用于解决因系统故障导致的数据丢失问题。当操作到达Region时,HBase会将数据首先写入WAL,并将其保存在HDFS的/hbase/.logs目录下。WAL采用环状滚动日志结构,数据被写入WAL后会被写入HDFS的/hbase/.logs目录下,而超过检查时间并且数据已经持久化后,则会移动到/hbase/.oldlogs目录下,这个过程称为滚动。如果数据超过TTL时间或不再需要作为恢复数据的备份,则数据将从/hbase/.oldlogs中删除,从而完成一份数据在WAL中的生命周期。

影响WAL文件从/hbase/.oldlogs完全删除的条件有:

  • TTL进程:该进程保证WAL文件一致存货到hbase.master.logcleaner.ttl定义的超时时间
  • replication被份机制:如果开启HBase备份机制,要保证备份集群已经不需要该WAL了。

2.2 问题原因

/hbase/.oldlogs的数据已经持久化到存储了,一般是用来作为灾难恢复的。正常情况下不需要保留太久的oldlogs,因此可以通过配置TTL时间让master自动清理oldlogs。

三、解决方案

3.1 确认master状态

登录http://${master}:${port}/master-status

3.2 登录hbase参数配置页面

使用浏览器打开$master_ip:$port/cm.jsp,默认账号密码是 hbase/hbase

3.3 修改参数

调整master的log保留时间,对应参数为 hbase.master.logcleaner.ttl。该值默认为259200000,代表3天,将该修改为86400000(1天):

填写好对应的key和value,点击set,底部会出现success,表示配置成功。

3.4 重启Master

一般情况下部署了三台master,其中两台运行了master进程,可以通过如下命令确认运行master的服务器

ps aux|grep master

su hadoop
~/hbase-current/bin/hbase-daemon.sh stop master
~/hbase-current/bin/hbase-daemon.sh start master

四、验证

查看oldlogs空间占用是否在逐渐减少:

su hadoop
hdfs dfs -du -h /hbase

猜你喜欢

转载自blog.csdn.net/zfw_666666/article/details/133793263