Ubuntu HDFS数据迁移方法是什么
小樊
44
2025-11-15 05:42:23
Ubuntu环境下常用的HDFS数据迁移方法
一、迁移方式总览
- Hadoop DistCp:HDFS官方分布式拷贝工具,适合同版本/跨版本、同/跨集群迁移,支持带宽限速、增量同步、权限保留等,用法为:hadoop distcp [options] 。适合绝大多数批量迁移场景。
- HDFS快照 + DistCp:对关键目录先创建快照,再基于快照迁移,便于在迁移窗口内获得一致性视图。
- 对象存储中转:通过DistCp把数据迁到对象存储(如COS),再从对象存储迁到目标集群,适合跨机房/跨云或网络受限场景。
- 关系型数据库与HDFS互导:使用Sqoop在MySQL ↔ HDFS之间导入导出,适合表型数据/维表同步。
- 第三方ETL工具:如DataX、Kettle、DataPipeline等,适合复杂转换与调度场景。
二、DistCp常用命令与场景
- 基本用法
- 同版本集群:hadoop distcp hdfs://src-nn:8020/path hdfs://dst-nn:8020/path
- 跨版本集群(HTTP方式):hadoop distcp hftp://src-nn:50070/path hdfs://dst-nn:8020/path
- 常用参数
- -m N:指定Map任务数(并发度)
- -bandwidth N:限制带宽(MB/s),降低对业务影响
- -update/-overwrite:已存在文件时更新/覆盖
- -append:追加数据到已存在文件
- -p:保留权限、属主、时间戳等
- 示例
- 全量迁移并按文件大小切分并发:hadoop distcp -m 20 -bandwidth 100 hdfs://nn1:8020/data hdfs://nn2:8020/data
- 增量同步(仅传差异):hadoop distcp -update hdfs://nn1:8020/data hdfs://nn2:8020/data
- 跨版本迁移:hadoop distcp hftp://nn1:50070/data hdfs://nn2:8020/data
三、迁移流程与关键注意事项
- 评估与规划
- 盘点数据量:hdfs dfs -du -h /,按业务/目录拆分迁移批次
- 评估带宽与窗口:选择低峰时段,必要时做带宽限速
- 小流量演练:先迁移100GB/500GB/1TB验证速率与问题
- 一致性策略
- 静态数据:一次性全量迁移
- 动态数据:采用全量 + 多次增量(如按天/小时窗口),或使用HDFS快照获取一致性视图后迁移
- 权限与元数据
- 使用**-p**保留权限/属主/时间戳;迁移后核对ACL与Quota
- 安全与网络
- 跨集群迁移优先走内网;如启用Kerberos,需完成双方集群认证与票据配置
四、Sqoop用于MySQL与HDFS互导
- 环境准备(Ubuntu示例)
- 安装Sqoop 1.4.7、Hadoop 3.x、MySQL 5.7;将MySQL JDBC驱动放入$SQOOP_HOME/lib;配置SQOOP_HOME、HADOOP_COMMON_HOME、HADOOP_MAPRED_HOME等环境变量
- 从MySQL导入HDFS
- 示例:sqoop import -connect jdbc:mysql://localhost:3306/test --username root --password 123456 -table test1 -m 1
- 从HDFS导出到MySQL
- 先准备目标表结构,再导出:sqoop export --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --table test2 --export-dir /user/hadoop/test1/part-m-00000 -m 1