Hbase恢复误删数据

1.hdfs的回收站机制

    客户有时会误删一些数据,在生产环境下,误删数据会造成非常严重的后果。

    在hdfs上有一个回收站的设置,可以将删除的数据存在目录”/user/$/.Trash/”中,设置回收站的参数如下:

fs.trash.interval=0

    以分钟为单位的垃圾回收时间,垃圾站中数据超过此时间,会被删除。如果是0,垃圾回收机制关闭。可以配置在服务器端和客户端。如果在服务器端配置trash无效,会检查客户端配置。如果服务器端配置有效,客户端配置会忽略。也就是说,Server端的值优先于Client。

    如有同名文件被删除,会给文件顺序编号,例如:a.txt,a.txt(1)

 

fs.trash.checkpoint.interval=0

    以分钟为单位的垃圾回收检查间隔(这个应该是检查回收站过期的数据定期的删除。)。应该小于或等于fs.trash.interval。如果是0,值等同于fs.trash.interval。该值只在服务器端设置。

 

    如果disable+drop误删了hbase表数据,数据不会放到回收站中,hbase有自己的一套删除策略。


 

2. 误删HBase表的恢复

 

    HBase的数据主要存储在分布式文件系统HFile和HLog两类文件中。Compaction操作会将合并完的不用的小Hfile移动到<.archive>文件夹,并设置ttl过期时间。HLog文件在数据完全flush到hfile中时便会过期,被移动到.oldlog文件夹中。

    HMaster上的定时线程HFileCleaner/LogCleaner周期性扫描.archive目录和.oldlog目录, 判断目录下的HFile或者HLog是否可以被删除,如果可以,就直接删除文件。

    关于hfile文件和hlog文件的过期时间,其中涉及到两个参数,如下:

(1)hbase.master.logcleaner.ttl

    HLog在.oldlogdir目录中生存的最长时间,过期则被Master的线程清理,默认是600000(ms);

(2)hbase.master.hfilecleaner.plugins

    HFile的清理插件列表,逗号分隔,被HFileService调用,可以自定义,默认org.apache.hadoop.hbase.master.cleaner.TimeToLiveHFileCleaner。

    反编译hbase的代码,在类org.apache.hadoop.hbase.master.cleaner.TimeToLiveHFileCleaner中,可以看到如下的设置:


 

    默认hfile的失效时间是5分钟。由于一般的hadoop平台默认都没有对该参数的设置,可以在配置选项中添加对hbase.master.hfilecleaner.ttl的设置。

    实际在测试的过程中,删除一个hbase表,在hbase的hdfs目录下的archive文件夹中,会立即发现删除表的所有region数据(不包含regioninfo、tabledesc等元数据文件),等待不到6分钟所有数据消失,说明所有数据生命周期结束,被删除。在hfile声明周期结束到被发现删除中间间隔不到一分钟。

 

 

    下面以星环的TDH(transwarp data hub)为例讲一下hbase(星环版本中为hyperbase)表数据恢复的具体过程。

    TDH的hbase在hdfs上数据目录如下:

    表的存储位置为/hyperbase1/data/default/<表名>

    Hbase表在hdfs的文件结构:


    包括表的描述的文件夹.tabledesc,一个临时的文件夹.tmp(从后台日志中看到,删除的时候数据会进行archiving归档,归档过程中数据会暂时存储到这个文件夹中),和region数据。打开任何一个region的文件夹,里面包含该regioninfo文件和列族命令的文件夹,一个列族命令的文件夹应该就是一个store,里面有若干的storefile(对应hfile),如下图所示。


    

Disable+drop删除表test1,下面介绍下恢复过程。

 

第一步:抢救数据

    保证在删除表之后的5分钟之内将hdfs目录/hyperbase1/archive/文件夹下的数据拷贝到/tmp下。

第二步:新建同名和同列族的表

 

第三步:将抢救下来的region数据拷贝到hbase表对应的目录下


第四步:元数据修复

查询执行修复的帮助命令,

sudo -u hbase hbase hbck –help


 

    由于缺少regioninfo信息,不能直接用hbck –fixMeta修复。

    尝试先用fixHdfsOrphans,fixTableOrphans,fixMeta的顺序进行修复,失败。只能用-repair修复,但是内部的执行顺序可能不对,执行一遍失败,多执行几遍,成功。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HBase 是一个分布式的、可扩展的 NoSQL 数据库系统,可以提供高性能的数据存储和访问功能。快照是 HBase 提供的一项重要功能,它可以帮助用户在数据出现故障或需要回滚到之前的状态时进行数据恢复HBase 的快照功能是通过记录数据表的不可变状态来实现的。当用户创建一个快照时,HBase 会记录当前数据表的元数据数据文件的状态,并为后续的数据变更创建一个新的文件。这样,在数据发生故障或需要恢复到之前的状态时,用户可以使用快照来还原数据恢复数据时,用户可以选择回滚到之前的某个时间点或某个特定的快照。HBase 会根据用户选择的快照或时间点,自动将数据恢复到该状态。在恢复过程中,HBase 会使用之前创建的快照文件替换掉当前数据表的数据文件,从而将数据恢复到之前的状态。 快照恢复数据的过程是非常快速的,因为它只涉及到文件的替换操作,并不需要重新写入大量的数据。同时,由于快照是基于数据表的不可变状态,因此用户可以同时恢复多个表的数据,而不会影响其他表的正常操作。 需要注意的是,快照只能恢复到之前的状态,而无法对数据进行精确的修改或删除。如果用户需要对数据进行修改或删除操作,需要使用其他方式来实现,如使用 HBase 提供的 API 或工具。 总之,HBase 的快照功能可以帮助用户在数据发生故障或需要回滚到之前的状态时进行数据恢复。通过记录数据表的不可变状态,用户可以快速、方便地将数据恢复到之前的状态,保证数据的完整性和一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值