Hadoop 在 Linux 上的数据迁移实战指南
一、迁移方式与适用场景
- DistCp 分布式拷贝:Hadoop 自带,基于 MapReduce 实现,适合 同版本/跨版本、跨集群 的大规模数据迁移,支持 增量同步、带宽限流、权限保留 等能力。
- 对象存储中转:通过 DistCp 将数据先迁到 对象存储(如 COS),再回迁到目标集群,适合 网络隔离/跨机房/阶段性迁移。
- Hive 表级迁移:结合 export/import 或 DistCp + 建表 DDL,适合 结构化表数据 的迁移与回放。
- HBase 迁移:使用 Export/Import 或 Snapshot,适合 表级/快照级 迁移与一致性保障。
- 其他 ETL 工具:如 DataX、Kettle 等,适合 异构数据源到 HDFS 或 HDFS 到外部系统 的场景。
二、标准流程与关键准备
- 盘点与评估:用
hdfs dfs -du -h / 统计目录容量,按业务/目录拆分迁移批次,评估 带宽与窗口期。
- 网络与解析:打通两集群网络,必要时在 /etc/hosts 或 DNS 中配置双向解析;跨版本或 HA 场景需正确配置 nameservice/RPC 地址。
- 安全与权限:确认 Kerberos 票据或凭据可用;跨安全域按需在配置中允许 fallback-to-simple-auth-allowed(仅限受控环境)。
- 资源与限流:为 DistCp 任务申请合适 YARN 队列/容器资源,并用 -bandwidth 控制单 Map 带宽,避免影响线上业务。
- 策略制定:优先采用 “全量 + 多次增量” 的节奏,必要时用 HDFS 快照 生成差异清单,降低迁移窗口风险。
三、常用命令与参数示例
- 同版本集群拷贝(HDFS 协议)
hadoop distcp -m 50 -bandwidth 200 \
hdfs://src-nn:8020/user/root \
hdfs://dst-nn:8020/user/root
- 跨版本集群拷贝(HTTP 接口)
hadoop distcp -m 50 \
webhdfs://src-nn:9870/user/root \
hdfs://dst-nn:8020/user/root
- 增量同步(仅复制新增/变更)
hadoop distcp -update -m 50 \
hdfs://src-nn:8020/data \
hdfs://dst-nn:8020/data
- 已存在文件追加新数据(不覆盖)
hadoop distcp -append -m 50 \
hdfs://src-nn:8020/logs/2025 \
hdfs://dst-nn:8020/logs/2025
- 基于快照的“差量”拷贝(需源/目标启用快照)
hadoop distcp -diff snap1 snap2 -m 50 \
hdfs://src-nn:8020/warehouse \
hdfs://dst-nn:8020/warehouse
- 对象存储中转(迁到 COS 再回迁)
# 迁到 COS
hadoop distcp -m 50 \
hdfs://src-nn:8020/data \
cosn://bucket-name/path/
# 从 COS 回迁
hadoop distcp -m 50 \
cosn://bucket-name/path/ \
hdfs://dst-nn:8020/data
- 常用参数说明
- -m:并发 Map 数(提升吞吐,需结合带宽与集群资源)。
- -bandwidth:单 Map 带宽上限(单位 MB),用于限流。
- -p:保留属性(如 rbugpcaxt:复制、块大小、用户、组、权限、校验和、ACL、XATTR、时间戳)。
- -update / -append / -overwrite:增量更新/追加/覆盖策略。
- -i:忽略失败(适合容忍个别文件异常的场景)。
- -skipcrccheck:跳过 CRC 校验(仅在性能优先且可接受风险时使用)。
四、迁移验证与切换上线
- 一致性校验:优先依赖 DistCp 的 CRC 校验;对关键目录做 抽样校验/全量校验(如按清单比对文件数、大小、校验和)。
- 权限与属主:使用 -p 保留权限;如未保留,迁移后用
hdfs dfs -chown/chmod 修正。
- 服务切换:按“先非核心、后核心”逐步切换客户端配置到新集群,保留 回滚预案 与 短时间双读。
- 监控与日志:全程监控 DistCp MR 任务、网络吞吐、NameNode/DataNode 负载,保存日志用于审计与复盘。
五、常见问题与排错要点
- 版本不兼容:跨大版本优先用 webhdfs/hftp;确认 HTTP 端口(如 50070/9870) 与 nameservice 配置正确。
- Kerberos 认证:确保 kinit 有效或启用 跨域认证 配置;必要时在受控网络内临时放宽策略。
- HA 名称解析:两集群需能解析对方的 nameservice 与 RPC/HTTP 地址,否则任务会报 UnknownHostException。
- 增量漏拷/失败:任务启动即快照文件列表,迁移窗内新增文件可能漏拷;用 -update 做多轮增量,失败文件用 -i 忽略后补拷。
- 带宽冲击:通过 -bandwidth 与 低峰时段 控制;必要时分目录/分批次执行。
- Hive/HBase 专项:Hive 用 export/import + DDL;HBase 用 Export/Import 或 Snapshot,导入后执行 hbck 修复元数据与分配。