centos hbase数据迁移方案
小樊
39
2025-12-21 18:16:05
CentOS 下 HBase 数据迁移方案
一、方案总览与选型
- 离线全量迁移(推荐):基于 Snapshot 快照克隆/导出,或 Export/Import MapReduce 作业,适合一次性搬迁、版本升级、跨环境迁移。快照几乎不拷贝数据,速度快;Export/Import 通用性强。
- 近实时同步:基于 HBase Replication 复制,适合不停机持续同步,先追平历史再切换。
- 离线大规模批量导入:先 Export 再转换为 HFile,用 LoadIncrementalHFiles 批量加载,写入吞吐高、对线上影响小。
- 停服全量拷贝:集群停机后用 Hadoop DistCp 直拷 HBase 表目录,再在目标集群恢复,适合允许停机的场景。
二、标准操作步骤
-
离线 Snapshot 迁移(推荐)
- 在目标集群用 hbase shell 创建与源一致的表结构(库名/表名/列族一致)。
- 在源集群创建快照:snapshot ‘src_table’, ‘snap1’。
- 可选克隆到目标做校验:clone_snapshot ‘snap1’, ‘verify_tbl’(不产生数据拷贝,仅创建链接,便于快速校验)。
- 将快照拷贝到目标 HDFS(/hbase 根目录保持一致):
hadoop distcp -m 50 hdfs://src-nn:8020/hbase/.hbase-snapshot/snap1 hdfs://tgt-nn:8020/hbase/.hbase-snapshot/
hadoop distcp -m 50 hdfs://src-nn:8020/hbase/archive hdfs://tgt-nn:8020/hbase/archive
- 在目标集群恢复快照:restore_snapshot ‘snap1’;如需重命名,先 clone_snapshot 再 restore/切换。
- 校验数据:count/scan 抽样对比。
-
Export/Import MapReduce
- 源集群导出:
hbase org.apache.hadoop.hbase.mapreduce.Export src_table /export/src_table
- 跨集群传输(若不在同一 HDFS):
hadoop distcp hdfs://src-nn:8020/export/src_table hdfs://tgt-nn:8020/export/src_table
- 目标集群导入(表需先存在且结构一致):
hbase org.apache.hadoop.hbase.mapreduce.Import src_table /export/src_table
- 校验数据一致性与 Region 分布。
-
Replication 近实时迁移
- 双方开启复制:在 hbase-site.xml 设置 hbase.replication=true,并配置 ZooKeeper 信息。
- 目标集群创建同结构表。
- 在源集群添加复制对端并启动:
add_peer ‘peer1’, ‘zk1:2181:/hbase’
enable_table_replication ‘src_table’
- 监控复制延迟与状态,追平后短暂停写,切换读写到目标集群,停止复制。
-
Bulk Load 批量导入(高吞吐)
- 源集群 Export 得到 HFile 输入:
hbase org.apache.hadoop.hbase.mapreduce.Export src_table /export/src_table
- 转换为 HFile(示例,按实际列族/参数调整):
hbase org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2 \
-D mapreduce.job.output.key.class=org.apache.hadoop.hbase.KeyValue \
-D mapreduce.job.output.value.class=org.apache.hadoop.hbase.KeyValue \
-D hbase.table.name=target_table \
/export/src_table /export/hfiles
- 按目标表 Region 边界执行 LoadIncrementalHFiles:
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
-D hbase.table.name=target_table \
/export/hfiles target_table
- 校验。
-
停服 DistCp 拷贝
- 停写源表(flush/major_compact 可选)。
- 直拷表目录(含 .regioninfo、列族目录、hfiles 等):
hadoop distcp -m 50 hdfs://src-nn:8020/hbase/data/default/src_table hdfs://tgt-nn:8020/hbase/data/default/src_table
- 目标集群使用 HBase 工具或脚本恢复表元数据(如 add_table.rb 等),再校验。
三、方法对比与适用场景
| 方法 |
停机要求 |
速度与成本 |
一致性 |
适用场景 |
| Snapshot 克隆/拷贝 |
不停机 |
快(元数据级),网络/存储有开销 |
高(时间点一致) |
版本升级、跨环境迁移、快速克隆 |
| Export/Import |
不停机 |
中(MR 作业),可并行 |
高(导出时点一致) |
通用离线迁移、跨版本/跨发行版 |
| Replication |
不停机 |
近实时,带宽持续占用 |
最终一致 |
不停机迁移、双写到切换 |
| Bulk Load |
不停机 |
写入吞吐高,准备阶段有计算成本 |
高(导入时点一致) |
超大数据量、对写入性能敏感 |
| DistCp 停服 |
需停写 |
快(直拷),需停机窗口 |
高(停机时点一致) |
允许停机的全量迁移 |
四、迁移前后关键检查与注意事项
- 前置检查
- 双方 HBase/Hadoop 版本兼容、ZooKeeper 地址可达、HDFS 权限与配额充足。
- 目标表结构(列族、TTL、压缩、版本数、预分区)与源表一致;如不一致先调整再导入。
- 规划 时间窗口/带宽/并发度,避免影响线上。
- 一致性校验
- 行数对比(count)、抽样 scan/随机 get、重要业务主键集合校验;必要时对比 Checksum/Md5。
- 性能与稳定性
- Snapshot/Export/Import 可通过 -m 并发 map 数 调整;Bulk Load 前先 major_compact 减少文件数。
- 长链路迁移建议 分批/分表 执行,便于回滚与定位问题。
- 切换与回滚
- Replication 场景先 追平延迟→短暂停写→切读到目标→观察→停复制;异常可切回源。
- 保留 快照/导出目录 一段时间作为回滚点,清理前再次校验。