HBase Snapshot

概念

snapshot是元数据信息集合,允许返回到表之前的某个状态。snapshot并不是表的拷贝,它仅仅是一个文件名称的列表 ,并不会复制实际的数据。完整的snapshot恢复意味着回到之前的某个时刻的”表模式”,而在那之后的所有修改将会丢失。

针对snapshot的操作包括:
1 创建snapshot: 在某个固定的表上创建snapshot,如果表的regions正在移动,如在做负载均衡、拆分或合并时,创建可能会失败。
2 克隆snapshot: 根据一个固定的snapshot创建一个新表,新表的数据和snapshot对应的那个时刻的表相同,克隆出的结果是一个完整的新表,对原始的表或snapshot不产生任何影响。
3 恢复snapshot: 根据snapshot将表恢复到之前的某个状态,会丢弃snapshot创建之后的所有修改。
4 删除snapshot: 从系统中删除一个snapshot,释放snapshot指定的那个文件占用的磁盘空间,同时不影响其他的snapshots。
5 导出snapshot: 复制snapshot数据和元数据到其他集群。这个操作只涉及HDFS,因为不需要和Master或Region Server交互,因此HBase可以在down状态。

snapshot与CopyTable/ExportTable主要的区别在于snapshot操作只会写元数据而不涉及任何实际数据操作。
HBase的一个主要设计原则是一旦文件写入将不再被修改。文件不可变意味着snapshot只是用来跟踪当前状态的文件,使得在compaction的时候保证那些文件不会被删除,而是被归档(archived)。

HBase Shell: Snapshot操作

HBase配置文件hbase-site.xml中的hbase.snapshot.enabled属性用来打开/关闭snapshot功能,若希望使用HBase snapshot功能,需要将此配置打开。

对表创建snapshot语法为:

hbase> snapshot 'tableName','snapshotName'

显示所有snapshot列表语法为:

hbase> list_snapshots

上述命令将显示snapshot名称,源表名称,及创建日期。
移除snapshot的语法为:

hbase> delete_snpashot 'snapshotName'

移除一个snapshot不会影响表上面的其他snapshot。
从一个特定的snapshot上创建新表语法为:

hbase> cloen_snapshot 'snapshotName', 'newTableName'

clone_snapshot不会涉及数据复制,因此不会造成同样的数据有两份。
从某个snapshot将表恢复到以前某个时刻语法为:

hbase> restore_snapshot 'snapshotName'

要想把一个已有的snapshot导出到其他集群,使用ExportSnapshot工具,export不会影响RegionServer的负载,它是工作在HDFS级别,export需要指定一个HDFS路径。

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot
SnapshotName -copy-to hdfs:///srv2:8082/hbase

你可能感兴趣的:(HBase)