# 在源集群中创建快照
(linux shell) hbase snapshot -t <table_name> -n <snapshot_name>
或(hbase shell) snapshot <table_name>, <snapshot_name>
# 将快照从源集群导出到目标集群
(linux shell) hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot <table_name> -copy-from hdfs://<source_cluster>/hbase -copy-to hdfs://<target_cluster>/hbase -mappers 200 -bandwidth 20 -chuser hbase -chgroup hbase -overwrite
或
(linux shell) hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot <table_name> -copy-from hdfs://namenodeip:8020/hbase -copy-to hdfs://namenodeip:8020/hbase -mappers 200 -bandwidth 20 -chuser hbase -chgroup hbase -overwrite
参数:
-mappers ->任务map数
-bandwidth -> 网络带宽最大使用量
-chuser -> 所有者
-chgroup -> 所有组
-overwrite ->覆盖
注意:
-chuser hbase -chgroup hbase必须加,否则在clone时会有权限问题,导致clone失败
补充:
有些时候执行完任务,在目标集群并不能找到对应快照,再执行一次,会在很短时间内完成
# 在目标hbase中从快照恢复表
(hbase shell) clone_snapshot <snapshot_name>,<table_name>
补充:恢复完需验证数据,有些时候数据检索不到,drop后,再重新clone出来可恢复
# 在目标集群中删除快照
(hbase shell) delete_snapshot <snapshot_name>
# 在源集群中删除快照和表
(hbase shell) delete_snapshot <snapshot_name>
(hbase shell) disable <tablename>(数据同步时无需执行)
(hbase shell) drop <tablename>(数据同步时无需执行)
TIPS:
正常集群内的表及数据目录:
/hbase/data/default/
通过快照传输过去的表数据在hdfs的目录:
/hbase/archive/data/default/,且表名与源集群表名相同
克隆出的表也存在于/hbase/data/default/,表名取决于clone时的命名,drop后会删除,但不会删除原始数据目录(/hbase/archive/data/default/)