一.简介

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