Hbase 表是基于 hadoop HDFS 构建,所以 Hbase 的迁移可从两个维度来看,基于 hadoop HDFS 的 distcp 的迁移方式和基于 Hbase 表结构的 Hbase 层面提供的相关工具迁移。
如上图所示,HBase 迁移有多种方案,其中基于 Snapshot 的迁移方式是推荐的迁移方案。
下面给出 Snapshot 方式进行数据迁移的方式,迁移背景是,两个无法通信的 Hbase 集群之间进行数据迁移
下面例子中以迁移一张名为 OGE_Vector_Fact_Table 的表为例
1 创建快照
- 在旧集群上为要迁移的表创建快照
hbase shell> snapshot 'OGE_Vector_Fact_Table', 'OGE_Vector_Fact_Table_snapshot'
2 复制快照和表的数据到新集群
- 如果两个集群之间可以通信,则可以使用
distcp
命令进行快照迁移,命令如下:
# 复制快照hadoop distcp hdfs://old-cluster/hbase/.hbase-snapshot/OGE_Vector_Fact_Table_snapshot hdfs://new-cluster/hbase/.hbase-snapshot/# 复制表数据hadoop distcp hdfs://old-cluster/hbase/data/default/OGE_Vector_Fact_Table hdfs://new-cluster/hbase/data/default/# 附:新集群上查看快照hbase shell> list_snapshots# 附:删除快照hbase shell> delete_snapshot 'OGE_Vector_Fact_Table_snapshot'
- 我们这里两个集群无法通信,因此采用拷贝至本地再上传至新集群
hdfs
上的方式:
转移快照
# 将快照从旧集群hdfs上拷贝至本机,然后将该文件夹转移至另一个服务器集群上hadoop fs -copyToLocal /hbase/.hbase-snapshot/OGE_Vector_Fact_Table_snapshot /mnt/oge/hbase-snapshot# 在新集群机器上将快照文件夹上传至hdfshadoop fs -copyFromLocal /mnt/oge/hbase-snapshot/OGE_Vector_Fact_Table_snapshot /hbase/.hbase-snapshot
转移表数据
# 将快照从旧集群hdfs上拷贝至本机,然后将该文件夹转移至另一个服务器集群上hadoop fs -copyToLocal /hbase/data/default/OGE_Vector_Fact_Table /mnt/oge/hbase-data# 在新集群机器上将表数据上传至hdfshadoop fs -copyFromLocal /mnt/oge/hbase-data/OGE_Vector_Fact_Table /hbase/data/default
3 恢复快照
- 在新集群上通过克隆快照恢复表
hbase shell> clone_snapshot 'OGE_Vector_Fact_Table_snapshot', 'OGE_Vector_Fact_Table'
- 检查新表大小以及数据是否都正确
hbase shell> scan 'OGE_Vector_Fact_Table'> count 'OGE_Vector_Fact_Table'
4 其他说明
-
/hbase/data/default/OGE_Vector_Fact_Table
和/hbase/archive/data/default/OGE_Vector_Fact_Table
目录内容可能不完全一样。主要区别在于:-
/hbase/data/default/OGE_Vector_Fact_Table
:这是表的活动数据目录,存储当前正在使用的数据文件。 -
/hbase/archive/data/default/OGE_Vector_Fact_Table
:这是已归档的数据目录,用于存储表的历史数据文件,通常在表被删除或重大数据变更时使用。
-
-
详细说明:
-
活动数据目录:存储表的实时数据,包括所有活跃的HFiles和元数据。
-
归档数据目录:当表被删除或进行数据压缩、快照等操作时,原始数据会被移动到归档目录中,以便在需要时恢复。
-
通过比较两个目录的内容,你可以看到是否有任何差异。请注意,快照和数据归档操作会影响这些目录的内容。
在HBase中,
restore_snapshot
和clone_snapshot
在恢复数据时有不同的用法和目的:
-
restore_snapshot
-
用法:将现有表恢复到快照的状态。
-
特点:破坏性操作,当前表数据会被快照数据替代。
-
示例:
hbase shell> restore_snapshot 'my_snapshot'
-
-
clone_snapshot
-
用法:从快照中创建一个新表,不影响现有表。
-
特点:非破坏性操作,允许恢复数据到不同的表名。
-
示例:
hbase shell> clone_snapshot 'my_snapshot', 'new_table'
-