通过快照迁移hbase1.1.2的表数据(以clone_snapshot为例说明),
【为什么要用clone的方式复制出一张新表】
有时候因为客户端的不当行为导致了丢失hbase表数据,如果全表恢复(restore_snapshot)则恢复之前必须禁用(disable)该表。但是我不想禁用该表,我想要这张表继续提供服务,怎么办?那么我们就采用克隆快照的方式生成另一张表即可。
【snapshot功能简介】
使用hbase提供的快照(snapshot)功能,不需要停掉hbase集群,不会对Region Server产生影响。导出快照到其他集群也不会对Region Servers产生影响。快照涉及的复制和恢复不包括数据拷贝,只涉及元数据的复制。snapshot为所有HFile文件分别新建引用关系(类似指针),这些元数据就是snapshot.
操作步骤,每一步的命令都整理好,如截图——
步骤1:从源集群中查得hbase根目录
[root@master-1-001 ~]# grep -i -r -C 2 "hbase.rootdir" /usr/hdp/current/hbase-client/conf/
/usr/hdp/current/hbase-client/conf/hbase-site.xml- <property>
/usr/hdp/current/hbase-client/conf/hbase-site.xml: <name>hbase.rootdir</name>
/usr/hdp/current/hbase-client/conf/hbase-site.xml- <value>hdfs://hdfs-ha/apps/hbase/data</value>
/usr/hdp/current/hbase-client/conf/hbase-site.xml- </property>
/usr/hdp/current/hbase-client/conf/hbase-site.xml-
步骤2:准备将要导出的快照
步骤3: 执行作业——导出快照到目标集群的hbase根目录中, 此操作要求两集群的网络互通
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot usertb_snapshot_20180412 -copy-to hdfs://your_target_ip_address/apps/hbase/data
# hbase将会把此作业交给MapReduce框架去具体处理
步骤4:查看目标集群是否成功接收到快照了
步骤5:在目标集群的hbase shell中,直接从刚才的快照中克隆出一张新表
命令格式:clone_snapshot "snapshot_name", "table_name",
例如 clone_snapshot "usertb_snapshot_20180412", "your_namespace:uertb_from_old_cluster"