CDH是Cloudera的完全开源分布式Apache Hadoop及相关项目(包括Apache HBase)。CDH的当前版本(4.2)引入的一个HBase新特性最近加入到了主干中,允许用户对指定表进行快照。
在CDH4.2之前,唯一能够备份或克隆表的方法就是使用复制/导出表或者在关闭表之后拷贝HDFS中所有的hfile。复制/导出是通过一系列工具调用MapReduce来扫描并复制表,这样会对域服务器的效率有直接的影响。关闭表会停止所有的读写操作,实际环境中往往无法接受。
相比之下HBase快照允许管理员不拷贝数据直接克隆一张表,这对域服务器产生的影响最小。将快照导出至其他集群不会直接影响到任何域服务器;导出只是带有一些额外逻辑的群间数据同步。
下面是一些HBase快照的使用场景:
快照就是一份元信息的合集,允许管理员恢复到表的先前状态。快照不是表的复制而是一个文件名称列表,因而不会复制数据。完全快照恢复是指恢复到之前的“表结构”以及当时的数据,快照之后发生的数据不会恢复。
快照和复制/导出表之间的主要差异是快照操作只写入元数据,不涉及海量数据。
HBase的主要设计原则之一就是一旦文件写入就不再修改。文件不可变意味着快照只需保持对快照产生时存在的文件追踪,并且在压缩时负责提示系统该文件不应删除而是应当归档保存。
同样的原则也适用于克隆和恢复操作。因为文件是不变的,新建一个表只需要通过快照“链接”到文件引用即可。
导出快照是唯一需要复制数据的操作,因为其他集群没有数据文件。
导出快照与复制/导出表除了更好地保持一致性外,主要的不同在于导出快照是在HDFS的层面操作的。这意味这Master和域服务器与操作无关。因此不需要为不必要的数据创建缓存空间,也不会有扫描过程因为大量对象创建引起的GC暂停。对于HBase来说主要性能影响就是DataNode额外的网络和磁盘负载。
通过检查hbase-site.xml中的hbase.snapshot.enabled是否设置为true确认打开了快照许可。获取指定表的快照使用snapshot命令(不产生文件复制)
1
|
hbase> snapshot ‘tableName’, ‘snapshotName’
|
列出所有的快照,使用 list_snapshot 命令。会展示出快照名称,源表,以及创建日期和时间
1
2
3
|
hbase> list_snapshots
SNAPSHOT TABLE + CREATION TIME
TestSnapshot TestTable (Mon Feb 25 21:13:49 +0000 2013)
|
删除快照使用 deleted_snapshot 命令。删除快照不会影响到克隆表或者之后生成的快照。
1
|
hbase> delete_snapshot ‘snapshotName’
|
使用clone_snapshot命令从指定的快照生成新表(克隆)。由于不会产生数据复制,所以最终用到的数据不会是之前的两倍。
1
|
hbase> clone_snapshot ‘snapshotName’, ‘newTableName’
|
使用restore_snapshot命令将指定快照内容替换当前表结构/数据。
1
|
hbase> restore_snapshot ‘snapshotName’
|
使用ExportSnapshot工具将现有快照导出至其他集群。导出工具不会影响到域服务器负载,只是工作在HDFS层面所以需要指定HDFS路径(其他集群的hbase根目录)
1
2
3
|
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot
SnapshotName -copy-to hdfs:///srv2:8082/hbase
|
快照需要依赖一些条件,目前有一些工具还没有很好的整合新特性:
当前快照包含了所有的基础功能特性,但是还是有很多工作要做,包括监测、页面UI集成、磁盘空间优化等等。
转自:http://www.importnew.com/4966.html
原文:http://blog.cloudera.com/blog/2013/03/introduction-to-apache-hbase-snapshots/