Hadoop在Linux下如何进行数据迁移
小樊
45
2025-12-02 19:08:53
Hadoop在Linux下的数据迁移实操指南
一、迁移方式与适用场景
- DistCp 跨集群拷贝:Hadoop 官方分布式拷贝工具,基于 MapReduce 实现,适合同版本或异版本集群之间的大规模数据迁移,支持增量同步与带宽限流。
- 对象存储中转:当两集群网络不通或带宽受限时,可先将数据迁至对象存储(如COS),再从中转桶拉回目标集群。
- Hive 元数据与数据迁移:结合 export/import 或 DistCp 完成 Hive 表数据与元数据的迁移与校验。
- HBase 数据迁移:采用 Export/Import 或 Snapshot 方式,适合表级迁移与一致性要求较高的场景。
- 本地/远程备份与归档:在单集群或临时保护场景下,可用 rsync/tar 对本地挂载目录或导出的归档进行备份与恢复。
二、标准流程与关键准备
- 数据量评估与分批策略:用命令查看目录容量与结构,按业务、目录分批迁移,降低一次性迁移风险。示例:
hdfs dfs -du -h /。
- 网络与连通性:确保两集群(含所有 DataNode)网络互通,必要时在 /etc/hosts 或 DNS 中配置解析;跨机房/跨域需评估带宽与时延。
- 安全与权限:若启用 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 TABLE 或 ALTER TABLE … RECOVER PARTITIONS 补齐分区。
- HBase 元数据不一致:导入后用 hbck -fixMeta/-fixAssignments/-repair 修复。