HBase没有直接复制表的命令,但是可以通过HBase快照进行复制表的操作。
一、什么是快照
快照是表元数据的不可变集合,以及在拍摄快照时包含表的 HFile 列表。
快照的“克隆”从该快照创建新表,快照的“恢复”将表的内容返回到创建快照时的内容,“克隆”和“恢复”操作不需要复制任何数据,因为底层 HFiles(包含 HBase 表数据的文件)不会被任何操作修改。
同时,将快照导出到另一个集群对本地集群的 RegionServers 几乎没有影响。
二、快照配置
在HBase中需要打开快照的配置,才能进行对快照的操作,配置名为:hbase.snapshot.enabled
<property>
<name>hbase.snapshot.enabled</name>
<value>true</value>
</property>
默认情况下,快照在 0.95+中启用,默认情况下在 0.94.6+时关闭
三、HBase Shell对快照的操作
1.生成快照
snapshot 'sourceTable', 'snapshotName'
默认是在生成快照之前在内存中执行数据刷新,这意味着内存中的数据包含在快照中。也可以不进行内存中数据刷新,生成快照。
snapshot 'sourceTable', 'snapshotName', {SKIP_FLUSH => true}
2.列出快照
列出所有生成的快照
list_snapshots
3.克隆快照
在快照中,可以创建一个新表,其中包含拍摄快照时的相同数据。
克隆操作不涉及数据副本,对克隆表的更改不会影响快照或原始表。
也就是对HBase复制表的操作。
clone_snapshot 'snapshotName', 'newTableName'
3.恢复快照
还原操作需要禁用表,并且表将恢复到拍摄快照时的状态。
disable 'tableName'
restore_snapshot 'snapshotName'
4.删除快照
delete_snapshot 'snapshotName'
5.导出快照
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshotName -copy-to hdfs://srv1:8082/hbase -mappers 16 -bandwidth 200
5.1.配置说明
-snapshot 后面跟快照名称
-copy-to 加hdfs的地址,如果需要本集群导出就配置本集群地址,如果要跨集群导出就设置跨集群的地址
-mappers 映射器
-bandwidth 限制导出快照时的带宽消耗(每秒兆字节数的整数)
网友评论