HBase在0.94之后提供了Snapshot功能,一个snapshot其实就是一组metadata信息的集合,它可以让管理员将表恢复到以前的一个状态。snapshot并不是一份拷贝,它只是一个文件名的列表,并不拷贝数据。一个全的snapshot恢复以为着你可以回滚到原来的表schema和创建snapshot之前的数据。在0.95之后默认开启snapshot功能,之前版本的需要手动开启对snapshot的支持,修改hbas-site.xml文件添加
<property>
<name>hbase.snapshot.enabled</name>
<value>true</value>
</property>
主要提供了以下几个操作(目前只是对单个表进行这样的操作):
#take snapshot
hbase> snapshot 'tableName', 'snapshotName' #list snapshots
hbase> list_snapshots
#delete snapshot
hbase> delete_snapshot 'snapshotName' #clone snapshot
hbase> clone_snapshot 'src_snapshot','dest_snapshot' #restore snapshot, 首先必须将表disable掉
hbase> restore_snapshot 'snapshotName'
实践的问题
目前我们线上的集群是hbase-0.94的,开启了snapshot功能,实践了一下,有以下几个问题:
- 元数据存在不一致状态时,一般的hbase一做split的时候就会出现暂态的元数据不一致
- 需要做restore的时候它会先对表的当前状态做一下snapshot,成功之后才会去restore,这个有点没必要,有时候我们正是因为元数据不一致才会去做restore,这样就会没办法去做
- 生成snapshot的时候只能是一张表一张表去做,不知道后面的hbase版本会不会一个操作解决所有表的snapshot
后期计划升级hbase,尝试新版本的snapshot会不会更实用可靠一些。