HBase 数据迁移实践

最近更新时间:2024-06-24 15:27:11

我的收藏
Hbase 表是基于 hadoop HDFS 构建,所以 Hbase 的迁移可从两个维度来看,基于 hadoop HDFS 的 distcp 的迁移方式和基于 Hbase 表结构的 Hbase 层面提供的相关工具迁移。

如上图所示,HBase 迁移有多种方案,其中基于 Snapshot 的迁移方式是推荐的迁移方案。

HBase 基于 Snapshot 迁移

说明:
以下步骤均以 hadoop 用户操作。
1. 在目标集群上建立表结构一样的表。
$ hbase shell
hbase> create 'myTable', 'cf1', 'cf2'
2. 在原集群上对表初始化数据。
$ hbase shell
hbase> put 'myTable', 'row1', 'cf1:a', 'value1'
hbase> put 'myTable', 'row2', 'cf2:b', 'value2'

hbase> scan 'myTable'
ROW COLUMN+CELL row1 column=cf1:a, timestamp=2023-08-09T16:43:10.024, value=value1 row2 column=cf2:b, timestamp=2023-08-09T16:43:20.036, value=value2
3. 使用 hbase shell 在原始集群中创建一个快照。
$ hbase shell
hbase>snapshot 'myTable', 'myTableSnapshot'
这里 'myTable' 是 hbase 的表名,'myTableSnapshot' 是快照的名称。创建完成后可使用 list_snapshots 确认是否成功,或使用 delete_snapshot 删除快照。
hbase> delete_snapshot 'myTableSnapshot'
4. 在源集群中导出快照到目标集群。
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot myTableSnapshot -copy-to hdfs://10.0.0.38:4007/hbase/snapshot/myTableSnapshot
说明:
1、10.0.0.38:4007 是目标集群的 $activeip:$rpcport,导出快照时系统级别会启动一个 mapreduce 的任务,可以在后面增加 -mappers 16 -bandwidth 200 来指定 mapper 和带宽。其中200指的是200MB/sec。
2、如果目标端集群 hdfs 上存在 /hbase 目录,可直接将快照导出到目标集群 /hbase 目录下,省略下边 5 中的拷贝步骤。
5. 快照还原到目标集群的目标 HDFS,在目标集群中执行如下命令。
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot myTableSnapshot -copy-from /hbase/snapshot/myTableSnapshot -copy-to /hbase/
6. 在目标集群从 hdfs 恢复相应的 hbase 表及数据。
hbase> disable "myTable"
hbase> restore_snapshot 'myTableSnapshot'
hbase> enable 'myTable'
7. 最后可通过简单的 HBase 表操作进行测试。