Ubuntu下HDFS数据迁移的常用方法与最佳实践
在Ubuntu环境下,HDFS数据迁移需根据数据规模、集群版本及业务需求选择合适工具。以下是具体方法及注意事项:
hdfs dfs -get/-put命令适用于少量数据(如GB级以内)的迁移,操作简单但效率较低。
hdfs dfs -get /hdfs/source/path /local/destination/pathhdfs dfs -put /local/source/path /hdfs/destination/pathdistcp命令(Hadoop自带)是Hadoop生态中最常用的大规模数据复制工具,支持并行传输、断点续传,适用于集群间或集群内大规模数据迁移。
hadoop distcp hdfs://source-namenode:port/path/to/source hdfs://destination-namenode:port/path/to/destinationhftp协议):hadoop distcp hftp://source-cluster:50070/path/to/source hdfs://destination-cluster:9000/path/to/destination-p:保留文件权限、所有者、组等属性(确保一致性);-update:更新目标集群中已存在的文件(避免重复传输);-m <num>:指定并行任务数(根据集群资源调整,如-m 100表示100个并行任务)。适用于需要零数据丢失的场景(如生产环境),通过快照创建源数据的只读副本,再复制到目标集群。
hdfs dfsadmin -allowSnapshot /path/to/source(允许目录创建快照)→ hdfs dfs -createSnapshot /path/to/source snapshot_name(生成快照);distcp或rsync);基于HDFS存储策略(Storage Policy),将数据从旧存储介质(如机械硬盘)迁移到新介质(如SSD),适用于存储升级场景。
hdfs-site.xml,启用Mover功能并设置自动迁移CRON表达式;hdfs mover -p /path/to/source(指定源目录);hdfs dfs -du -h /命令查看各目录总大小,按业务划分(如用户数据、日志数据)统计,制定分批迁移计划;distcp命令参数,如使用hftp协议)。distcp -update参数更新目标集群中已修改的文件,或编写脚本比对源/目标集群的文件数量、大小;-p参数保留文件权限,或使用hdfs dfs -chmod/-chown命令手动调整;tc命令),避免占用过多带宽影响线上业务;hdfs超级用户或目录所属用户);yarn application -list查看distcp任务进度,记录日志以便排查问题(如distcp -log /path/to/logfile)。