温馨提示×

Debian下HBase数据迁移步骤是什么

小樊
44
2025-12-21 03:22:47
栏目: 智能运维

Debian下HBase数据迁移步骤

一、迁移方案速览与选择

  • ExportSnapshot(推荐):对线上影响小,基于HDFS层的快照拷贝,适合跨集群、跨版本、大体量迁移。步骤:源集群创建快照 → 用ExportSnapshot拷贝到目标HDFS → 目标集群从快照恢复表。适合生产环境最小化停机。
  • CopyTable:基于MapReduce在线拷贝表数据,适合同版本、中小体量(<10T)或需要按时间/行键范围迁移的场景。步骤:目标表先建好 → 执行CopyTable指向对端ZooKeeper → 校验数据。
  • Export/Import:先Export为SequenceFile到HDFS,再Import到目标集群,适合跨版本或需要中间文件沉淀的场景。步骤:Export源表 → 在目标集群创建表 → Import导入。
  • DistCp + LoadIncrementalHFiles:停机或只读窗口内,将HFile直接拷到目标HDFS,再用LoadIncrementalHFiles装载,适合超大体量且可接受短暂停写的场景。步骤:flush/可选disable → DistCp拷贝HFile → LoadIncrementalHFiles装载。
  • Replication:近实时备份/迁移,适合持续同步与灰度切换。步骤:源表开启REPLICATION_SCOPE → 目标集群开启复制并新增peer → 启动复制。

二、标准流程 ExportSnapshot(推荐)

  • 前置检查
    • 两集群网络互通(端口如2181/16000/16010/50070/8020等放通),DNS/hosts可解析;HDFS权限与Kerberos(若启用)准备就绪。
    • 目标集群已创建同名表且列族一致(结构需一致,否则恢复会失败)。
  • 源集群创建快照
    • hbase shell: snapshot ‘mytbl’, ‘snap_20251221
  • 拷贝快照到目标HDFS
    • 建议用MR方式并限速,减少对线上影响:
      • hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot
        -snapshot ‘snap_20251221’
        -copy-from hdfs://src-nn:8020/hbase
        -copy-to hdfs://dst-nn:8020/hbase
        -mappers 20 -bandwidth 50
  • 目标集群恢复表
    • hbase shell: clone_snapshot ‘snap_20251221’, ‘mytbl
    • 如需与源库一致,可再做一次major_compact(可选):major_compact ‘mytbl’
  • 校验
    • hbase shell: count ‘mytbl’、scan ‘mytbl’, {LIMIT => 10}、对比region数量与分布。

三、其他方案步骤要点

  • CopyTable(在线迁移,适合中小体量)
    • 目标表先建好(列族一致,建议按源表预分裂以提升性能)。
    • 执行拷贝(示例):
      • hbase org.apache.hadoop.hbase.mapreduce.CopyTable
        –peer.adr=dst-zk1:2181,dst-zk2:2181:/hbase mytbl
    • 常用调优参数:-Dhbase.client.scanner.caching=200~500,-Dmapreduce.local.map.tasks.maximum=16(单机本地模式),-Dmapred.map.tasks.speculative.execution=false
    • 校验:count/scan对比源表。
  • Export/Import(跨版本友好)
    • Export:hbase org.apache.hadoop.hbase.mapreduce.Export mytbl hdfs://dst-nn:8020/mytbl_export
    • 目标集群先建表(同名同列族)。
    • Import:hbase org.apache.hadoop.hbase.mapreduce.Import mytbl hdfs://dst-nn:8020/mytbl_export
    • 校验:count/scan对比源表。
  • DistCp + LoadIncrementalHFiles(大体量离线)
    • 源端:flush ‘mytbl’(必要时disable ‘mytbl’)
    • 拷贝HFile:hadoop distcp hdfs://src-nn:8020/hbase/data/default/mytbl hdfs://dst-nn:8020/hbase/import/mytbl
    • 目标端装载:hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://dst-nn:8020/hbase/import/mytbl mytbl
    • 校验:count/scan对比源表。

四、迁移前后校验与常见问题

  • 校验清单
    • 行数/分区数:count、scan小样本、对比region分布;必要时用VerifyReplication(若启用复制)做最终一致性校验。
    • 版本与TTL:确认目标表VERSIONS/TTL与源表一致,避免查询/过期行为差异。
    • 权限与可见性:ACL/Sentry/Ranger策略一致;列族属性(压缩、块大小、布隆过滤器)一致。
  • 常见问题与处理
    • 版本/客户端不一致导致作业失败:确保HBase与Hadoop客户端版本兼容,必要时在运行命令的节点上正确设置HBASE_CLASSPATH或调整lib下的hadoop-client版本。
    • 目标表结构不一致:恢复/导入前务必创建同名同列族的表;快照恢复要求结构一致。
    • 脏元数据/Region未分配:在目标集群执行hbck修复(如-fixMeta、-fixAssignments),必要时再重启相关服务。
    • 网络与带宽:ExportSnapshot/CopyTable/DistCp均为MR任务,建议合理设置**-mappers-bandwidth**,避开业务高峰。
    • 云环境限制:部分云HBase默认不开放HDFS端口,基于HDFS的snapshot/distcp/LoadIncrementalHFiles不可用,改用CopyTable或官方提供的迁移通道。

0