温馨提示×

Hadoop在Linux下如何进行数据迁移

小樊
45
2025-12-02 19:08:53
栏目: 智能运维

Hadoop在Linux下的数据迁移实操指南

一、迁移方式与适用场景

  • DistCp 跨集群拷贝:Hadoop 官方分布式拷贝工具,基于 MapReduce 实现,适合同版本或异版本集群之间的大规模数据迁移,支持增量同步带宽限流
  • 对象存储中转:当两集群网络不通或带宽受限时,可先将数据迁至对象存储(如COS),再从中转桶拉回目标集群。
  • Hive 元数据与数据迁移:结合 export/importDistCp 完成 Hive 表数据与元数据的迁移与校验。
  • HBase 数据迁移:采用 Export/ImportSnapshot 方式,适合表级迁移与一致性要求较高的场景。
  • 本地/远程备份与归档:在单集群或临时保护场景下,可用 rsync/tar 对本地挂载目录或导出的归档进行备份与恢复。

二、标准流程与关键准备

  • 数据量评估与分批策略:用命令查看目录容量与结构,按业务、目录分批迁移,降低一次性迁移风险。示例:hdfs dfs -du -h /
  • 网络与连通性:确保两集群(含所有 DataNode)网络互通,必要时在 /etc/hostsDNS 中配置解析;跨机房/跨域需评估带宽与时延。
  • 安全与权限:若启用 Kerberos,需完成双方集群的互信/票据配置;迁移任务使用的账号需具备源/目的路径的读/写权限
  • 资源与窗口:DistCp 会向 YARN 申请 Map 任务资源,选择业务低峰时段执行,避免影响线上任务。
  • 目标集群容量与配额:提前检查 HDFS 容量、NameNode/DataNode 负载、配额(quota) 与副本策略,防止写入失败。
  • 一致性校验方案:规划迁移前后校验方法(如文件计数、大小、抽样校验和),确保完整性一致性

三、常用命令与示例

  • 同版本集群全量迁移(HDFS 协议)
    示例:hadoop distcp hdfs://nn1:9820/foo/bar hdfs://nn2:9820/bar/foo
  • 异版本集群迁移(HTTP 接口)
    示例:hadoop distcp webhdfs://src-nn:9870/user/root hdfs://dst-nn:9820/user/root
  • 增量同步(仅复制新增/变更)
    示例:hadoop distcp -update -m 50 hdfs://src:9820/data hdfs://dst:9820/data
  • 断点续传与覆盖策略
    示例:hadoop distcp -overwrite -m 50 hdfs://src:9820/data hdfs://dst:9820/data
  • 带宽限流(每个 Map 最大带宽,单位 MB)
    示例:hadoop distcp -bandwidth 100 -m 50 hdfs://src:9820/data hdfs://dst:9820/data
  • 保留权限/属主/时间戳/ACL/XATTR
    示例:hadoop distcp -p -m 50 hdfs://src:9820/data hdfs://dst:9820/data
  • 对象存储中转(COS 示例)
    上传:hadoop distcp hdfs://src:9820/data cosn://bucket/data
    回拉:hadoop distcp cosn://bucket/data hdfs://dst:9820/data
  • Hive 表迁移(export/import + DistCp)
    导出:hive -e "export table db.tbl to '/tmp/export/tbl'"
    拷贝:hadoop distcp hdfs://src:9820/tmp/export/tbl hdfs://dst:9820/tmp/export/tbl
    导入:hive -e "import table db.tbl from '/tmp/export/tbl'"
  • HBase 迁移(Export/Import)
    导出:hbase org.apache.hadoop.hbase.mapreduce.Export 'ns:tbl' hdfs://dst:9820/tmp/hbase_export/tbl
    导入:hbase org.apache.hadoop.hbase.mapreduce.Import 'ns:tbl' hdfs://dst:9820/tmp/hbase_export/tbl

四、迁移策略与一致性保障

  • 全量 + 多轮增量:先全量,再按时间窗口多次 -update 增量,最后做一致性校验与业务切换。
  • 快照 + Diff:对关键目录创建 HDFS 快照,用 -diff 识别源/目标差异,精准同步变更与删除。
  • 限速与窗口:通过 -bandwidth 控制带宽,选择低峰时段执行,减少对线上业务影响。
  • 幂等与可重跑:合理组合 -overwrite/-update,任务失败可清理目标脏数据后重跑,保证迁移幂等。
  • 权限与 ACL:使用 -p 保留 rbugpcaxt(复制、块大小、用户、组、权限、校验和类型、ACL、XATTR、时间戳),避免上线后权限错乱。
  • 校验与对账:迁移后对比文件数、总大小、抽样校验和;Hive 表执行 MSCK REPAIR TABLE 或统计行数核对;HBase 用 hbck 修复与校验。

五、常见问题与排查要点

  • 版本不兼容:优先使用 webhdfs/hftp 进行跨版本拷贝;确认 HTTP 端口(常见 50070/9870)与协议匹配。
  • Kerberos 互信:两集群需完成 keytab/principal 配置与票据获取;必要时在命令侧指定 -D 参数或调整安全策略。
  • NameNode HA 访问:在客户端配置 dfs.nameservices/dfs.ha.namenodes.xxx/dfs.client.failover.proxy.provider.xxx,用 nameservice ID 访问。
  • 带宽打满与业务抖动:通过 -bandwidth 限速,分批次、分时段迁移,并监控 YARN/网络 指标。
  • 任务失败与脏数据:失败后用 -overwrite 重跑;大任务建议拆分路径并行执行,缩短回滚窗口。
  • Hive 分区缺失:导入后执行 MSCK REPAIR TABLEALTER TABLE … RECOVER PARTITIONS 补齐分区。
  • HBase 元数据不一致:导入后用 hbck -fixMeta/-fixAssignments/-repair 修复。

0