在 Linux 环境下进行 HDFS 数据迁移,常见场景和做法如下,你可以根据实际需求选择。
hdfs dfs -mv适合同集群、同 NameService 内移动数据
hdfs dfs -mv /user/old/data /user/new/data
✅ 秒级完成(只改元数据)
❌ 不能跨集群
distcp(官方推荐)适合:集群间、量大、可断点
hadoop distcp \
hdfs://nn1:8020/source/path \
hdfs://nn2:8020/target/path
hadoop distcp \
-p \
-m 20 \
-update \
-delete \
hdfs://source/path hdfs://target/path
参数说明:
-p:保留权限、副本数、时间-m:并行 map 数-update:只同步变化的文件-delete:删除目标端多余文件⚠️ 注意:
yarn 用户或管理员执行hdfs dfs -copyFromLocal / -put适合:少量数据、从本地服务器
# 从旧集群下载
hdfs dfs -get /source/path /local/path
# 上传到新集群
hdfs dfs -put /local/path /target/path
❌ 慢、不适合 TB 级
webhdfs / httpfs适合:跨安全网络、不能直连
curl -i "http://nn:50070/webhdfs/v1/path?op=OPEN"
一般较少用于大规模迁移。
hadoop distcp -p hdfs://src hdfs://dst
sudo -u hdfs hadoop distcp src dst
kinit -kt /etc/security/keytab/hdfs.keytab hdfs@REALM
hadoop distcp src dst
hadoop distcp \
hdfs://ns1/user/data \
hdfs://ns2/user/data
如果你能告诉我:
我可以给你更精确的迁移命令和方案。