首页主机资讯HDFS在Ubuntu上如何进行数据迁移

HDFS在Ubuntu上如何进行数据迁移

时间2025-12-03 13:52:03发布访客分类主机资讯浏览647
导读:在 Ubuntu 环境下进行 HDFS 数据迁移的实用指南 一、迁移方式与适用场景 DistCp 跨集群/同集群拷贝:Hadoop 自带,适合批量、并行、可断点续传的 HDFS↔HDFS 迁移,支持带宽控制与增量同步。 对象存储作为中转:...

在 Ubuntu 环境下进行 HDFS 数据迁移的实用指南

一、迁移方式与适用场景

  • DistCp 跨集群/同集群拷贝:Hadoop 自带,适合批量、并行、可断点续传的 HDFS↔HDFS 迁移,支持带宽控制与增量同步。
  • 对象存储作为中转:当两集群网络不通或带宽受限时,可先将数据迁至对象存储(如 COS/OSS-HDFS),再下发到目标集群。
  • HDFS FUSE 挂载 + rsync/脚本:将 HDFS 挂载为本地目录后,用常规文件工具迁移,适合小规模或复杂编排。
  • HBase 表级迁移:使用 HBase Export/Import 将表数据导出为 HDFS 文件,再导入目标集群。
  • 关系型数据库 ↔ HDFS:使用 Sqoop 完成 MySQL/Oracle 等 RDBMS 与 HDFS 的双向导入导出。
  • 流式/计算引擎迁移:借助 Apache NiFi、Spark 等实现 ETL 式迁移与转换。

二、标准流程与关键命令

  • 步骤1 盘点与规划
    • 盘点数据规模:hdfs dfs -du -h /path;按业务/目录拆分迁移批次与时窗,避免高峰期影响业务。
  • 步骤2 选择工具与命令
    • 同版本集群:hadoop distcp hdfs://src-nn:9000/path hdfs://dst-nn:9000/path
    • 异版本或端口差异:可用 hftp://src-nn:50070/path hdfs://dst-nn:9000/path(旧集群 HTTP 访问端口通常为 50070)。
    • 常用选项:
      • 保留属性:-p(权限/属主/时间戳)
      • 增量更新:-update(目标已存在则覆盖差异)
      • 追加数据:-append(追加到目标文件)
      • 带宽控制:-bandwidth < MB>
      • 并行度:-m < maps>
  • 步骤3 一致性校验
    • 迁移后对比文件数与大小:hdfs dfs -count -q、抽样 hdfs dfs -checksum;失败文件记录并重跑。
  • 步骤4 切换与回滚
    • 灰度切换客户端配置到新集群,保留回滚窗口;观察监控与错误日志后再下线旧数据。

三、常见场景与命令示例

  • 同版本集群全量迁移
    • hadoop distcp -m 50 -p -bandwidth 200 hdfs://10.0.0.1:9000/data hdfs://10.0.0.2:9000/data
  • 异版本或端口差异
    • hadoop distcp -m 50 hftp://10.0.0.1:50070/data hdfs://10.0.0.2:9000/data
  • 增量同步(仅传差异)
    • hadoop distcp -update -p hdfs://src-nn:9000/data hdfs://dst-nn:9000/data
  • 通过对象存储中转(COS/OSS-HDFS)
    • 先到对象存储:hadoop distcp hdfs://src-nn:9000/data cosn://bucket/data
    • 再到目标集群:hadoop distcp cosn://bucket/data hdfs://dst-nn:9000/data
  • HBase 表级迁移
    • 导出:hadoop jar hbase-< version> .jar export < table> /hbase_export/< table>
    • 导入:hadoop jar hbase-< version> .jar import < table> /hbase_export/< table>
  • RDBMS ↔ HDFS(Sqoop)
    • 导入到 HDFS:sqoop import -connect jdbc:mysql://localhost:3306/db -username u -password p -table t -m 1
    • 导出到 MySQL:sqoop export --connect jdbc:mysql://localhost:3306/db --username u --password p --table t --export-dir /hdfs/path -m 1
  • FUSE 挂载后使用常规工具
    • 安装:sudo apt-get install hadoop-hdfs-fuse
    • 挂载:hadoop-fuse-dfs dfs://< nameservice_or_nn> :< rpc_port> /mnt/hdfs
    • 迁移:rsync -av /mnt/hdfs/ /local/backup/ 或编写脚本分批拷贝

四、安全与性能要点

  • Kerberos 环境:两集群均启用 Kerberos 时,需完成 kinit 并在必要时配置 ipc.client.fallback-to-simple-auth-allowed 以兼容跨域访问。
  • 带宽与窗口:使用 -bandwidth 限制吞吐,选择业务低峰时段执行;分批次迁移并保留回滚计划。
  • 容错与恢复:优先使用带 断点续传/重试 能力的工具(如 DistCp),对失败任务单独重跑并复核校验值。
  • 权限与审计:迁移前后核对 权限/属主/ACL,确保服务账号具备所需权限;保留迁移日志便于审计与复盘。
  • 云上场景:迁移至 OSS-HDFS 时,可使用 Jindo DistCp 实现全量/增量迁移,并支持在切换后配置 镜像回源 实现无停机逐步回填。

五、排错清单

  • ConnectionRefused/端口错误:DistCp 默认使用 8020(NameNode RPC),若服务端口为 9000 需显式指定;老集群 HTTP 访问端口常为 50070(用于 HFTP)。
  • 权限不足:确认执行用户在源/目标集群均具备读写与列表权限;必要时用 -p 保留权限并在两端统一 umask/ACL
  • Kerberos 认证失败:检查 keytab/principal、有效期与时钟同步;跨域访问按集群策略配置安全参数。
  • 网络抖动/任务失败:启用带宽限制与重试;对失败分片单独重跑,必要时缩小 -m 提升稳定性。
  • 数据不一致:迁移后抽样校验 文件大小/数量/校验和;对增量场景优先使用 -update 并结合业务时间窗口。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: HDFS在Ubuntu上如何进行数据迁移
本文地址: https://pptw.com/jishu/762326.html
Debian Java异常处理如何编写 HDFS在Ubuntu上如何扩展存储

游客 回复需填写必要信息