HBase误删数据如何抢救?

相信大家都有这样的经历,操作数据库的时候不小心误删除了数据,轻则被公司
处罚,重则开除。别慌,今天较你一招数据即可失而复得,mysql 里有 binlog
可以帮助我们恢复数据,但是没有开 binlog 也没有备份就尴尬了。如果是 HBase,
你没有做备份误删了又如何恢复呢?
数据保护
当误删数据发生时候,不管三七二十一,***要务是进入 hbase shell,执行如下
命令:
如果误删一张表的有多个 family 里的数据,需要都执行一下:
设置 KEEP_DELETED_CELLS 为 True 的目的在于防止数据被物理删除。这里
有必要解释一下 HBase 清理数据的原理:
• 首先 HBase 是一个 LSM 架构,不断发生着数据文件的写入和合并
• 当删除操作发生时,不会去清理数据文件中的数据,而是写入一个删除标
记到新文件中。
• 当某一刻 major compaction 发生时,在合并文件的同时会根据删除标记
清理数据,新合并出来的数据文件不会再有旧数据。
KEEP_DELETED_CELLS 的作用就是在 major compaction 发生的时候,决定要
不要清理旧数据。这里需要注意一点,即便 KEEP_DELETED_CELLS 设置为
True,数据仍然会因为过期而被清理(HBsae 表中的 TTL 属性)。这个设定无
可厚非,既然过期了,误删不误删也无所谓了。
数据恢复
数据恢复的前提数据没有被物理删除,也就是上文提及的。你只需要在查询
(Scan)的时候,指定 raw 模式来搜索数据,就能看到被删除的数据,之后你
要做就是把数据再写入一次。我们来看一个简单的例子,还是以 hbase shell 为
例子:
1.首先我们准备几行数据
2.然后我们删掉 y 开头掉数据
3.查一下,现在只有 3 行了
4.现在我们带上 raw 再次查找数据,不仅能看到被删除数据,还能看到删除标
记。
这里我设置了 TIMERANGE, 指定的是数据写入的时间。对于我这个 case 其
实并没有什么用,我只是想说明几点:
• 即便不设置 RAW,也可以通过时间搜索到被删数据。比如数据写入时间
是 T,delete 时间是 T+2,那么查找[0, T+1]的话就能看见数据。前提是
设置了 KEEP_DELETED_CELLS=TRUE
• 如果你后续写入重复的 Key,那你必须指定好 TIMERANGE,不然你可能
看到的不是原先删除的 keyVlaue。 • delete 操作默认的时间不是当前 server 的时间,也不是构造 Delete 对
象的时间,而是被删除的这个 keyValue 的写入时间。当然这个得看版
本,测试时候发现 1.x 和 2.x 还是不一样的,有点坑,还以为高版本不
能仅通过 TIMERAGE 搜素被删数据了。
• 如果你的 Delete mark 的时间和数据的时间一样,那只能通过 RAW 看
到。
数据恢复完,建议关闭 KEEP_DELETED_CELLS,节省空间,提高查询效率。
其他
上文使用的是 hbase shell 演示,你可以使用任何语言的 API 完成上面的操作。
如果你使用的是云 HBase,即便因为 major compaction 物理删除了数据,只
要你开启了备份功能,依然可以恢复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值