基于Replication能力迁移HBase数据到MRS集群
应用场景
HBase的Replication功能是一种数据同步机制,用于实现不同HBase集群之间的数据异步复制,主要用于提高数据可用性、实现灾难恢复以及满足跨地域数据分发等需求。
HBase Replication基于WAL(Write-Ahead Log,预写日志)机制实现,核心流程如下:
- 数据写入与WAL记录
- WAL日志复制
- 从集群重放日志
通过HBase Replication功能,可以将开源大数据平台或者自建HBase集群中的数据迁移到MRS集群的HBase中。
- 在目的端恢复快照可以完成元数据和历史数据迁移。
- Replication同步可以将源端WAL文件的数据迁移到目的端,完成增量数据迁移。

迁移调研
迁移HBase数据前需要对源端HBase组件进行调研,以便评估迁移过程中可能会产生的风险、对系统的影响等。调研主要包含HBase组件版本、部署模式、数据存储、性能优化等,具体请参考表1。
调研项目 |
调研内容 |
示例 |
---|---|---|
版本兼容性 |
源端、目标端HBase版本号。 |
基于Apache HBase 2.x版本。 |
源端、目标端HBase是否兼容标准API。 |
兼容标准API,支持华为云增强功能。 |
|
部署模式 |
源端、目标端HBase的部署模式。 |
自建物理/虚拟化集群、云原生服务,支持弹性扩缩容。 |
数据存储 |
源端、目标端HBase数据存储的存储方式。 |
本地HDFS或S3兼容存储、支持OBS(华为云对象存储),支持冷热数据分离存储。 |
性能优化 |
源端、目标端HBase性能优化策略。 |
|
监控与运维 |
源端、目标端HBase使用的监控、运维工具。 |
云日志服务LTS、支持自动化运维。 |
安全性 |
源端、目标端HBase使用的安全性配置。 |
SSL加密、Kerberos认证、VPC网络隔离、数据加密传输、细粒度ACL。 |
网络方案
迁移方案支持各种网络选型:公网、VPN、专线等。根据实际情况选择网络方案,两端网络互通即可迁移。
迁移网络类型 |
优点 |
缺点 |
---|---|---|
专线 |
|
|
VPN |
|
|
公网IP |
|
|
约束与限制
- 通过快照迁移历史数据时,元数据不能变化(会导致WAL文件里的增量数据无法写入原表中)。
- Replication对源端集群有负载,快照数据迁移完成前增量数据积压在源端WAL文件中,可能导致源端磁盘空间被占满。
- 仅支持同内核HBase版本的迁移,例如HBase1.x到HBase1.x、HBase2.x到HBase2.x。
迁移前准备
- 已创建包含有HBase组件的MRS集群,并已安装集群客户端。
- 源端集群和目标端集群网络已互通。
- 迁移用户权限已放通。
创建源端和目标端表的Replication关系
- 在源端集群的“/etc/hosts”文件下配置目标集群HBase实例所在节点的主机名与节点IP地址映射关系。
- 进入源端集群的HBase shell命令执行界面。
- 设置源端集群和目的端集群的peer关系。
add_peer 'peer_name', CLUSTER_KEY => 'ZooKeeper_IP:Port:/hbase'
- peer_name:为该复制关系指定一个唯一标识符,用于后续管理,建议命名具有辨识度。
- ZooKeeper_IP:Port:目标集群的ZooKeeper配置信息,用于源集群定位目标集群的元数据。
如何获取MRS集群的ZooKeeper地址与端口,可以参考如何获取MRS集群ZooKeeper的IP地址和端口?。
设置成功后可以执行以下命令查看是否设置成功。
list_peers
如果设置错误执行以下命令进行删除。
remove_peer 'peer_name'
- 在源端集群的表中设置replication属性。
在HBase shell中执行以下命令:
alter '目标表名',{NAME =>'列族名',REPLICATION_SCOPE => '1'}
例如假设目标表名为“student”,获取到的列族名为“f”,则执行命令为:
alter 'student',{NAME => 'f',REPLICATION_SCOPE => '1'}
也可以通过以下命令对指定表所有列族开启数据同步。
enable_table_replication '目标表名'
执行以下命令取消同步。
disable_table_replication '目标表名'
迁移历史HBase数据
- 给源端集群的HBase表创建快照。
在HBase shell中,执行以下命令创建表快照。
snapshot '表名','快照名'
例如生成表“student”的快照“student_snapshot”。
snapshot 'student','student_snapshot'
通过查看快照是否生成:
list_snapshots
- 将源端集群中的快照迁移到目的端MRS集群。
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \ -snapshot <snapshot_name> \ -copy-to <destination_path> \ [-mappers <num_mappers>] \ [-bandwidth <mb_per_sec>] \ [-diff <previous_snapshot>] \ [-overwrite]
- -snapshot <snapshot_name>:要导出的快照名称。
- -copy-to <destination_path>:目标HDFS路径,跨集群时格式为“hdfs://<目标NameNode>:<NameNode端口>/path”(需目标集群HDFS可访问)。
- -mappers <num_mappers> :可选,指定MapReduce任务的Mapper数量,可根据集群资源调整(数据量大时增加)。
- -diff <previous_snapshot>: 可选,仅复制当前快照与前一个快照之间的差异数据,适用于增量备份场景。
- -bandwidth <mb_per_sec>: 可选,限制传输带宽(单位:MB/s),避免占用过多网络资源。
- -overwrite:可选,若目标路径已存在同名文件,强制覆盖。
例如迁移快照“student_snapshot”到目的端MRS集群的“/hbase-snapshot”路径,退出HBase shell,然后执行以下命令:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot student_snapshot -copy-to hdfs://192.168.1.200:8020/hbase-snapshot
- 将快照数据放置到目的端MRS集群的对应的目录下。
- 由于HBase的archive目录会有定时清理机制,提前检查目标集群中HMaster清理过去HLog文件的周期并适当增大,避免数据复制过程中发生了数据清理。
登录目的端MRS集群的Manager管理界面,单击“集群 > 服务 > HBase”,在HBase服务页面单击“配置 > 全部配置”,搜索“hbase.master.cleaner.interval”配置并修改。
该参数单位为毫秒,例如设置为“600000”(10分钟)。
- 进入目的端MRS集群客户端,将元数据放到“/hbase/.hbase-snapshot”中,将原始数据放到“/hbase/archive”目录中。
如果目标集群中没有对应的目录,则可以提前创建,参考命令如下。
hdfs dfs -mkdir -p /hbase/.hbase-snapshot
hdfs dfs -mkdir -p /hbase/archive/data/default/
移动导出的snapshot文件到snapshot目录。
hdfs dfs -mv 导出的快照目录/.hbase-snapshot/快照名 /hbase/.hbase-snapshot/
hdfs dfs -mv 导出的快照目录/archive/data/default/表名 /hbase/archive/data/default/
例如,移动表student快照文件到指定snapshot目录下。
hdfs dfs -mv /hbase-snapshot/.hbase-snapshot/student_snapshot /hbase/.hbase-snapshot/
hdfs dfs -mv /hbase-snapshot/archive/data/default/student /hbase/archive/data/default/
- 由于HBase的archive目录会有定时清理机制,提前检查目标集群中HMaster清理过去HLog文件的周期并适当增大,避免数据复制过程中发生了数据清理。
- 在目的端集群中恢复表的快照。
进入目的端MRS集群的HBase shell命令执行界面。
- 禁用表:
disable 'student'
- 恢复表快照:
restore_snapshot '快照名'
例如恢复快照名student_snapshot:
restore_snapshot 'student_snapshot'
- 快照恢复完成重新启用表。
enable 'student'
- 禁用表:
迁移增量HBase数据
恢复快照后,目的端集群上会创建出对应的表,源端集群上设置的replication的关系会自动开始将之前保留的WAL日志的操作同步至目标集群的表中,开始增量数据同步。
可在HBase shell命令执行界面执行如下命令查看同步情况:
status 'replication'
数据校验
在源端和目的端集群检查数据是否一致。
例如通过执行select count (1)命令来对比表的行数。
select count (1) from student;