文档首页/ MapReduce服务 MRS/ 最佳实践/ 数据迁移/ 基于Replication能力迁移HBase数据到MRS集群
更新时间:2025-09-08 GMT+08:00
分享

基于Replication能力迁移HBase数据到MRS集群

应用场景

HBase的Replication功能是一种数据同步机制,用于实现不同HBase集群之间的数据异步复制,主要用于提高数据可用性、实现灾难恢复以及满足跨地域数据分发等需求。

HBase Replication基于WAL(Write-Ahead Log,预写日志)机制实现,核心流程如下:

  1. 数据写入与WAL记录

    客户端写入数据时,HBase先将操作记录到RegionServer的WAL中,再写入MemStore。

  2. WAL日志复制

    主集群(源集群)的RegionServer会将WAL中的日志条目异步发送到从集群(目标集群)。

  3. 从集群重放日志

    从集群接收日志后,按顺序重放这些操作,将数据同步到对应的表中,保证与主集群数据一致。

通过HBase Replication功能,可以将开源大数据平台或者自建HBase集群中的数据迁移到MRS集群的HBase中。

  • 在目的端恢复快照可以完成元数据和历史数据迁移。
  • Replication同步可以将源端WAL文件的数据迁移到目的端,完成增量数据迁移。
图1 HBase数据迁移方案

迁移调研

迁移HBase数据前需要对源端HBase组件进行调研,以便评估迁移过程中可能会产生的风险、对系统的影响等。调研主要包含HBase组件版本、部署模式、数据存储、性能优化等,具体请参考表1

表1 迁移调研

调研项目

调研内容

示例

版本兼容性

源端、目标端HBase版本号。

基于Apache HBase 2.x版本。

源端、目标端HBase是否兼容标准API。

兼容标准API,支持华为云增强功能。

部署模式

源端、目标端HBase的部署模式。

自建物理/虚拟化集群、云原生服务,支持弹性扩缩容。

数据存储

源端、目标端HBase数据存储的存储方式。

本地HDFS或S3兼容存储、支持OBS(华为云对象存储),支持冷热数据分离存储。

性能优化

源端、目标端HBase性能优化策略。

  • 需手动调优Region分布、预分区策略、支持自动负载均衡。
  • 智能预分区。
  • 支持向量化查询加速。

监控与运维

源端、目标端HBase使用的监控、运维工具。

云日志服务LTS、支持自动化运维。

安全性

源端、目标端HBase使用的安全性配置。

SSL加密、Kerberos认证、VPC网络隔离、数据加密传输、细粒度ACL。

网络方案

迁移方案支持各种网络选型:公网、VPN、专线等。根据实际情况选择网络方案,两端网络互通即可迁移。

表2 网络方案

迁移网络类型

优点

缺点

专线

  • 性能稳定:时延低至毫秒级。
  • 带宽选择范围可达几十Gbit/s。
  • 数据传输安全性高。
  • 成本高:一般是包年包月。
  • 源端和目的端私网IP地址不能重叠。
  • 开通时间长:一般需提前1个月申请。

VPN

  • 组网灵活,随时搭建。
  • 稳定性较好,安全性较好。
  • 成本适中:公网费用+VPN费用。
  • 时延较高。
  • 源端和目的端私网IP地址不能重叠。

公网IP

  • 支持源端和目的端私网IP一致的情况下实施迁移。
  • 带宽任意选择(Mbit/s~Gbit/s)。
  • 即买即用,快速绑定。
  • 成本低。
  • 稳定性差:带宽可能无法全部利用,迁移速率相对较慢。
  • 公网传输数据有泄漏风险。

约束与限制

  • 通过快照迁移历史数据时,元数据不能变化(会导致WAL文件里的增量数据无法写入原表中)。
  • Replication对源端集群有负载,快照数据迁移完成前增量数据积压在源端WAL文件中,可能导致源端磁盘空间被占满。
  • 仅支持同内核HBase版本的迁移,例如HBase1.x到HBase1.x、HBase2.x到HBase2.x。

迁移前准备

  • 已创建包含有HBase组件的MRS集群,并已安装集群客户端。
  • 源端集群和目标端集群网络已互通。
  • 迁移用户权限已放通。

创建源端和目标端表的Replication关系

  1. 在源端集群的“/etc/hosts”文件下配置目标集群HBase实例所在节点的主机名与节点IP地址映射关系。
  2. 进入源端集群的HBase shell命令执行界面。
  3. 设置源端集群和目的端集群的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'

  4. 在源端集群的表中设置replication属性。

    在HBase shell中执行以下命令:

    alter '目标表名',{NAME =>'列族名',REPLICATION_SCOPE => '1'}

    例如假设目标表名为“student”,获取到的列族名为“f”,则执行命令为:

    alter 'student',{NAME => 'f',REPLICATION_SCOPE => '1'}

    也可以通过以下命令对指定表所有列族开启数据同步。

    enable_table_replication '目标表名' 

    执行以下命令取消同步。

    disable_table_replication '目标表名'

迁移历史HBase数据

  1. 给源端集群的HBase表创建快照。

    在HBase shell中,执行以下命令创建表快照。

    snapshot '表名','快照名'

    例如生成表“student”的快照“student_snapshot”。

    snapshot 'student','student_snapshot'

    通过查看快照是否生成:

    list_snapshots

  2. 将源端集群中的快照迁移到目的端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可访问)。
      可登录目的端MRS集群的Manager界面,查看HDFS NameNode主节点的IP地址和端口。
      1. 单击“集群 > 服务 > HDFS > 实例”,查看实例列表中“NameNode (hacluster,主)”实例对应的IP地址。
      2. 单击“配置”,搜索并查询NameNode端口配置参数“dfs.namenode.rpc.port”。
    • -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

  3. 将快照数据放置到目的端MRS集群的对应的目录下。

    1. 由于HBase的archive目录会有定时清理机制,提前检查目标集群中HMaster清理过去HLog文件的周期并适当增大,避免数据复制过程中发生了数据清理。

      登录目的端MRS集群的Manager管理界面,单击“集群 > 服务 > HBase”,在HBase服务页面单击“配置 > 全部配置”,搜索“hbase.master.cleaner.interval”配置并修改。

      该参数单位为毫秒,例如设置为“600000”(10分钟)。

    2. 进入目的端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/

  4. 在目的端集群中恢复表的快照。

    进入目的端MRS集群的HBase shell命令执行界面。

    1. 禁用表:
      disable 'student'
    2. 恢复表快照:
      restore_snapshot '快照名'

      例如恢复快照名student_snapshot:

      restore_snapshot  'student_snapshot'
    3. 快照恢复完成重新启用表。
      enable 'student'

迁移增量HBase数据

恢复快照后,目的端集群上会创建出对应的表,源端集群上设置的replication的关系会自动开始将之前保留的WAL日志的操作同步至目标集群的表中,开始增量数据同步。

可在HBase shell命令执行界面执行如下命令查看同步情况:

status 'replication'

数据校验

在源端和目的端集群检查数据是否一致。

例如通过执行select count (1)命令来对比表的行数。

select count (1) from student;

数据迁移后清除设置

  1. 在源端集群的“/etc/hosts”文件下删除目的端集群HBase实例所在节点的主机名与节点IP地址映射关系。
  2. 进入源端集群的HBase shell命令执行界面。
  3. 清理复制关系。

    1. 查看已设置的复制关系。
      list_peers
    2. 删除指定复制关系。
      remove_peer 'peer_name'
    3. 取消表同步。

      查询表是否设置了同步状态。

      desc '目标表名' 
      通过如下命令取消同步:
      alter '目标表名',{NAME => '目标表对应的列族名',REPLICATION_SCOPE => '0'}

      或者直接执行:

      disable_table_replication '目标表名'

相关文档