温馨提示×

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

0