摘要: 本文介绍了一种 Hbase 迁移的方法, 可以在一些特定场景下运用.
背景
在 Hbase 使用过程中, 使用的 Hbase 集群经常会因为某些原因需要数据迁移. 大多数情况下, 可以跟用户协商用离线的方式进行迁移, 迁移离线数据的方式就比较容易了, 将整个 Hbase 的 data 存储目录进行搬迁就行, 但是当集群数据量比较多的时候, 文件拷贝的时间很长, 对客户的业务影响时间也比较长, 往往在客户给的时间窗口无法完成, 本文给出一种迁移思路, 可以利用 Hbase 自身的功能, 对集群进行迁移, 减少集群业务中断时间.
简介
大家都知道 Hbase 有 snapshot 快照的功能, 利用快照可以记录某个时间点表的数据将其保存快照, 在需要的时候可以将表数据恢复到打快照时间时的样子. 我们利用 Hbase 的 snapshot 可以导出某个时间点的全量数据.
因为用户的业务还在不停的写入表中, 除了迁移快照时间点之前的全量数据, 我们还需要将快照时间点后源源不断的增量数据也迁移走, 这里如果能采用双写的方式, 将数据写入两个集群就好了, 但是用户的业务不会这样做, 如果这样做还得保证双写的事务一致性. 于是可以利用 Hbase 的 replication 功能, replication 功能本身就是保留了源集群的 WAL 日志记录, 去回放写入到目的集群, 这样一来用户业务端 -> 原始集群 -> 目的集群便是个串形的数据流, 且由 Hbase 来保证数据的正确性.
所以这个迁移的方法就是利用 snapshot 迁移全量数据, 利用 replication 迁移增量数据.
迁移步骤
上图给出了迁移的整个时间线流程, 主要有这么 5 个时间点.
T0: 配置好老集群 A 集群到新集群 B 的 Replication 关系, Replication 的数据由 A 集群同步到集群 B, 将表设置成同步, 从此刻开始新写入 A 集群表的数据会保留在 WAL 日志中;
T1: 生成该时间点的全量数据, 通过创建快照, 以及导出快照数据的方式将该时间点的数据导出到新集群 B;
T2: 新集群 B 将 T1 时刻的快照数据导入, 此时新集群 B 中会由快照创建出表, 此时老集群 A 集群上设置的 Replication 的关系会自动开始将 T0 时刻保留的 WAL 日志回放至新集群 B 的表中, 开始增量数据同步.
T3: 由于从 T0-T3 之间的操作会花费一段时间, 此时会积累很多 WAL 日志文件, 需要一定的时间来同步至新集群, 这里需要去监控一下数据同步情况, 等老集群 WAL 被逐渐消费完, 此时可以将老集群的写业务停止一下并准备将读写业务全部切到新集群 B.
T4: T3-T4 之间应该是个很短的时间, 整个迁移也只有这个时间点会有一定中断, 此时是让用户将业务完全切到新集群 B, 至此迁移完成.
操作涉及的命令
1. 设置集群 A 和集群 B 的 peer 关系
在源集群 Hbase shell 中, 设定 peer
add_peer 'peer_name','ClusterB:2181:/Hbase'
2. 在集群 A 的表中设置 replication 属性
假设目标表名为 Student, 先获取 Family=f
进入 Hbase shell 中,
alter 'Student',{NAME => 'f',REPLICATION_SCOPE => '1'}
3. 给集群 A 的表创建快照
在 Hbase shell 中
snapshot 'Student','Student_table_snapshot'
4. 在 A 集群中导出快照
Hbase org.apache.hadoop.Hbase.snapshot.ExportSnapshot -snapshot Student_table_snapshot -copy-to /snapshot-backup/Student
5. 将快照数据放置到集群 B 的对应的目录下
上面命令会导出 2 个目录, 一个是快照元数据, 一个是原始数据
将元数据放到 / Hbase/.Hbase-snapshot 中, 将原始数据放到 / Hbase/archive 目录中
由于 Hbase 的 archive 目录会有个定时清理, 这里可以提前将集群 B 的 master 的 Hbase.master.cleaner.interval 值设置大点, 避免拷贝过程中发生碰巧发生了数据清理.
如果集群 B 中没有对应的目录, 可以提前创建
- hdfs dfs -mkdir -p /Hbase/.Hbase-snapshot
- hdfs dfs -mkdir -p /Hbase/archive/data/default/
移动导出的 snapshot 文件到 snapshot 目录
- hdfs dfs -mv /snapshot-backup/Student/.Hbase-snapshot/Student_table_snapshot /Hbase/.Hbase-snapshot/
- hdfs dfs -mv /snapshot-backup/Student/archive/data/default/Student /Hbase/archive/data/default/
6. 在新集群 B 中恢复表的快照
进入 Hbase shell
restore_snapshot 'Student_table_snapshot'
恢复完成后, 记得将集群 B 的 hmaster 中 Hbase.master.cleaner.interval 的值调整回来.
参考文档:
- https://blog.csdn.net/qq475781638/article/details/95253603
- https://support.huaweicloud.com/usermanual-mrs/mrs_01_0501.html
点击关注, 第一时间了解华为云新鲜技术~
来源: https://www.cnblogs.com/huaweiyun/p/13890963.html