一.简介
Hbase snapshot功能让你对表进行快照而不对 regionserver 产生太多影。快照,克隆 和恢复操作不涉及数据拷贝。而且,将快照导出到其他集群也不会对regionserver有影响。
0.94之前的版本,备份或克隆的唯一方法就是利用 Copytable/ExportTable , 或在禁用表后复制HDFS中的所有hfiles。这些方法的缺点是你会降低regionserver的性能,或者你需要禁用表。那意味着不能读写,这在生产环境通常是不可接受的。
首先在配置项中打开snapshot
<property>
<name>hbase.snapshot.enabled</name>
<value>true</value>
</property>
创建一个snapshot
无论表是否可用,你都可以做快照。Snapshot操作不涉及到数据复制。
$ ./bin/hbase shell
hbase> snapshot 'myTable', 'myTableSnapshot-122112'
默认的行为是在snapshot之前刷一遍内存中的数据。这意味着内存中的数据也包括在snapshot之中。大多数情况中,这是我们所希望的。然而,如果你的配置可以忍受内存中的数据没有刷进snapshot,你可以使用SKIP_FLUSH 选项来关闭。
没有办法确定或预测一个非常规并发的插入,更新将包括在给定的快照中,是否启用刷新。快照只是在时间窗口中的表的表示。
快照操作到达每个区域服务器所需的时间从几秒钟到一分钟不等,取决于资源负载和硬件或网络的速度,以及其他因素。也没有办法知道一个给定的插入或更新是在内存中还是被刷新。
列出snapshot
$ ./bin/hbase shell
hbase> list_snapshots
删除snapshot
$ ./bin/hbase shell
hbase> delete_snapshot 'myTableSnapshot-122112'
从snapshot 克隆一个表
从snapshot你可以创建一张数据与做snapshot时一样的新表。克隆操作,不涉及数据拷贝,修改克隆表也不影响snapshot和原始表。
$ ./bin/hbase shell
hbase> clone_snapshot 'myTableSnapshot-122112', 'myNewTestTable'
恢复一张表
恢复操作需要表离线不可用,恢复操作将让表回到snapshot时的状态,同时改变数据和schema,如果必要的话。
$ ./bin/hbase shell
hbase> disable 'myTable'
hbase> restore_snapshot 'myTableSnapshot-122112'
输出到其他集群
ExportSnapshot 工具 可以帮你拷贝所有与 snapshot相关的文件到另外一个集群,包括 (hfiles, logs, snapshot metadata) 。
这个工具和distcp一样,也是执行一个MR任务,在两个集群之间拷贝文件 , 他工作在文件系统层面,所以hbase不一定要处于在线状态。
$ bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to hdfs://srv2:8082/hbase -mappers 16