Ubuntu HDFS如何实现数据迁移
小樊
38
2025-12-16 20:37:43
Ubuntu环境下HDFS数据迁移实操指南
一、常用迁移方式与适用场景
- DistCp 跨集群/同集群复制:适合大规模数据搬迁、跨机房/跨版本迁移,支持带宽限制与增量同步。示例命令:hadoop distcp [options] hdfs://src/ hdfs://dst/。
- HDFS 快照 + DistCp:适合需要“时间点一致性”的迁移或回滚,先对源路径创建快照,再用 DistCp 复制快照目录。
- HDFS Mover:适合集群内部按存储策略做数据重分布/冷热分层,不直接用于跨集群迁移。
- Sqoop:适合在 HDFS ↔ 关系型数据库(如 MySQL) 之间导入导出(全量/增量),常用于数仓落盘或回流。
- FUSE 挂载 + 本地工具:将 HDFS 挂载为本地目录后,用 rsync/cp 等通用工具迁移,适合与第三方存储/设备联动。
二、标准流程与关键命令
- 步骤1 评估与规划
- 盘点数据规模:hdfs dfs -du -h /path;按业务/目录分批,避免一次性迁移冲击业务。
- 步骤2 选择一致性策略
- 停机窗口或“读一致”窗口;跨版本可用 HFTP;需要时间点一致性时用快照。
- 步骤3 执行迁移
- 全量:hadoop distcp -m 20 -bandwidth 100 hdfs://src/path hdfs://dst/path
- 增量:hadoop distcp -update -m 20 hdfs://src/path hdfs://dst/path
- 限速:通过 -bandwidth 控制(单位 MB/s),选择低峰时段执行。
- 步骤4 校验与切换
- 对比文件数与校验和(如 distcp 校验、抽样校验),确认无丢文件/坏块后再切换业务读写到新路径/新集群。
三、典型场景与命令示例
- 跨集群全量迁移(同版本示例)
- hadoop distcp -m 20 -bandwidth 100 hdfs://namenodeA:8020/data hdfs://namenodeB:8020/data
- 跨版本或 HTTP 访问方式
- hadoop distcp -m 10 hftp://namenodeA:50070/data hdfs://namenodeB:8020/data
- 增量同步(只传新增/变更)
- hadoop distcp -update -m 10 hdfs://src/path hdfs://dst/path
- 时间点一致性迁移(快照 + DistCp)
- 源端开启快照并创建:hdfs dfsadmin -allowSnapshot /data;hdfs dfs -createSnapshot /data snap1
- 复制快照:hadoop distcp hdfs://src/data/.snapshot/snap1 hdfs://dst/data_snap1
- HDFS ↔ MySQL(Sqoop)
- MySQL → HDFS:sqoop import --connect jdbc:mysql://127.0.0.1:3306/test --username root -P --table t1 --target-dir /user/hadoop/t1 -m 1
- HDFS → MySQL:sqoop export --connect jdbc:mysql://127.0.0.1:3306/test --username root -P --table t2 --export-dir /user/hadoop/t1/part-m-00000 -m 1
- FUSE 挂载后使用本地工具
- 安装:sudo apt-get install hadoop-hdfs-fuse
- 挂载(非HA):mkdir -p /mnt/hdfs;hadoop-fuse-dfs dfs://namenode:8020 /mnt/hdfs
- 挂载(HA):hadoop-fuse-dfs dfs://nameservice_id /mnt/hdfs
- 迁移:rsync -av /mnt/hdfs/ /mnt/backup/ 或 cp -r
四、迁移保障与常见问题
- 带宽与性能
- 用 -bandwidth 限流;-m 调整并发;分批次/低峰时段执行,避免影响线上业务。
- 一致性与断点续传
- 跨版本可用 HFTP;需要一致性时用快照;大任务建议“全量 + 多次增量”组合。
- 权限与属性
- 使用 -p 保留权限/属主/时间戳;目标集群提前准备相应用户与权限。
- Kerberos 与安全
- 双集群启用 Kerberos 时,按集群安全策略配置认证(如票据/keytab),必要时在 distcp 参数中按官方指引开启兼容选项。
- 网络与连通性
- 确认 NameNode RPC/HTTP 端口(如 8020/50070)放通;必要时用 telnet/ nc 测试连通性。
- 小文件与任务参数
- 小文件多时适当增大 -m,或先做合并/归档;结合集群资源调优 map/带宽参数。
五、方法对比与选择建议
| 方法 |
主要用途 |
优点 |
局限 |
| DistCp |
跨/同集群大规模复制 |
原生、稳定、可限速/增量 |
需处理一致性(快照/窗口) |
| 快照 + DistCp |
时间点一致性迁移/备份 |
一致性好、可回滚 |
需额外存储,操作链路多一步 |
| HDFS Mover |
集群内存储策略重分布 |
自动化、对业务影响小 |
非跨集群工具 |
| Sqoop |
HDFS ↔ 关系型数据库 |
上手快、支持全量/增量 |
依赖 JDBC,吞吐受库端限制 |
| FUSE 挂载 |
与本地/第三方存储联动 |
通用工具链可用 |
额外依赖,性能与稳定性依赖 FUSE |