温馨提示×

Debian上HBase数据迁移有哪些步骤

小樊
40
2025-12-25 00:37:15
栏目: 智能运维

Debian上HBase数据迁移步骤

一、迁移方式速览与选择

  • ExportSnapshot 快照导出/导入(推荐):对线上影响小,适合跨集群、跨版本迁移;通过 HDFS 拷贝快照后在目标集群恢复。
  • DistCp + BulkLoad:先停写/Flush,DistCp 拷贝 HFiles,再用 LoadIncrementalHFiles 导入;适合历史表或可接受短暂停写的场景。
  • CopyTable:基于 MapReduce 在线拷贝表数据,可跨集群;对源集群有一定读压力,适合中小规模或阶段性迁移。
  • Export/Import:先 Export 成 SequenceFile,再 Import 到目标表;适合跨版本,但仍需全表扫描。
  • Replication:基于 WAL 的异步复制,适合持续同步/双活,非一次性迁移。
    选择建议:优先用快照;历史数据且可停写用DistCp+BulkLoad;在线小中规模用CopyTable;跨版本可选Export/Import;需要持续同步用Replication

二、通用前置检查

  • 网络与权限:确保源/目标集群各节点网络互通,HDFS 与 HBase 端口放通,运行用户具备相应权限(HDFS 读写、HBase 管理员/表权限)。
  • 版本与兼容性:HBase 大版本差异可能影响兼容性;若走 HDFS 层(DistCp/HFiles),需保证 Hadoop 版本兼容或谨慎处理。
  • 表结构一致性:目标表需提前创建,列族名称、压缩/加密/版本数等保持一致;如需复制部分数据,明确 startrow/stoprow/starttime/endtime
  • 资源与并发:为 MR 作业合理设置 mappers、带宽与 JVM 参数,避免影响线上业务。
  • 高可用:确认 ZooKeeperHMaster 正常,迁移窗口内避免主备切换导致作业中断。

三、方法一 快照导出导入步骤(推荐)

  • 源集群创建快照
    1. 进入 HBase Shell:hbase shell
    2. 创建快照:snapshot ‘tableA’, ‘snapA’
  • 将快照拷贝到目标集群 HDFS
    1. 使用 ExportSnapshot(在任一能访问两边的客户端/网关执行):
      hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \ -snapshot snapA \ -copy-from hdfs://src-nn:8020/hbase \ -copy-to hdfs://dst-nn:8020/hbase \ -mappers 20 -bandwidth 50
  • 目标集群恢复快照
    1. hbase shell
    2. 恢复:restore_snapshot ‘snapA’
    3. 如目标表已存在且需覆盖,先 disable ‘tableA’ 再 restore_snapshot,随后 enable ‘tableA’
  • 校验
    1. 对比行数:count ‘tableA’(源/目标分别执行)
    2. 抽样校验关键数据/Region 分布
      说明:快照方式对线上影响小、效率高,适合跨集群与跨版本迁移。

四、方法二 DistCp 加 BulkLoad 步骤(适合历史表)

  • 源集群准备
    1. 建议先停写并 Flush:flush ‘tableA’(或 disable ‘tableA’ 确保一致性)
  • 拷贝 HFiles 到目标 HDFS
    1. hadoop distcp -m 50 hdfs://src-nn:8020/hbase/data/default/tableA \ hdfs://dst-nn:8020/hbase/data/default/tableA
  • 目标集群导入
    1. 确保目标表已创建且列族一致
    2. 使用 HBase 自带的 BulkLoad 工具(通常通过 HFileOutputFormat 生成 HFiles 后执行):
      hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \ hdfs://dst-nn:8020/hbase/data/default/tableA tableA
  • 修复元数据与分配
    1. hbase hbck -fixMeta -fixAssignments
  • 校验
    1. count ‘tableA’、抽样对比
      说明:该方式对业务影响可控(停写窗口短),但需保证两端 Hadoop 版本兼容;适合一次性迁移历史数据。

五、方法三 CopyTable 与 ExportImport 步骤(在线/跨版本)

  • CopyTable(在线拷贝,适合中小规模或阶段性迁移)
    1. 目标表先行创建(列族一致)
    2. 执行拷贝(跨集群需指定对端 ZK):
      hbase org.apache.hadoop.hbase.mapreduce.CopyTable \ –peer.adr=zk1,zk2,zk3:2181:/hbase \ -Dhbase.client.scanner.caching=300 \ -Dmapred.map.tasks.speculative.execution=false \ tableA
    3. 校验:count ‘tableA’、抽样对比
  • Export/Import(跨版本友好,但需全表扫描)
    1. 源集群导出:
      hbase org.apache.hadoop.hbase.mapreduce.Export tableA \ hdfs://dst-nn:8020/migration/tableA_export 3
    2. 目标集群导入(目标表需存在):
      hbase org.apache.hadoop.hbase.mapreduce.Import tableA \ hdfs://dst-nn:8020/migration/tableA_export
    3. 校验:count ‘tableA’、抽样对比
      说明:CopyTable 会对源表产生读压力;Export/Import 通过中间文件落地,便于跨版本与审计。

0