Ubuntu环境下HDFS数据传输的常用方法
HDFS提供hdfs dfs或hadoop fs命令(纯HDFS环境可互换),支持本地与HDFS间的基本文件操作,适用于小规模数据迁移。
put或copyFromLocal命令,将本地文件复制到HDFS指定路径。常用选项:-f(覆盖已存在的目标文件)、-p(保留文件属性,如权限、时间戳)。hdfs dfs -put /home/ubuntu/local_file.txt /user/ubuntu/hdfs_destination/ 或 hdfs dfs -copyFromLocal -f /home/ubuntu/local_file.txt /user/ubuntu/hdfs_destination/。get或copyToLocal命令,将HDFS文件复制到本地路径。常用选项:-p(保留文件属性)。hdfs dfs -get /user/ubuntu/hdfs_source/file.txt ~/local_downloaded_file.txt 或 hdfs dfs -copyToLocal /user/ubuntu/hdfs_source/file.txt ~/local_downloaded_file.txt。getmerge命令,将HDFS目录下的所有文件合并为一个本地文件,适合日志等场景。hdfs dfs -getmerge /user/ubuntu/logs/* ~/merged_logs.txt。cp(复制,保留原文件)、mv(移动/重命名,删除原文件)命令,在HDFS内部移动或复制数据。hdfs dfs -cp /user/ubuntu/source_file.txt /user/ubuntu/backup_file.txt;hdfs dfs -mv /user/ubuntu/old_name.txt /user/ubuntu/new_name.txt。对于TB/PB级数据,distcp(Distributed Copy)是Hadoop内置的并行复制工具,支持跨集群、断点续传,大幅提升传输效率。
hdfs dfs -distcp /user/ubuntu/large_dataset /user/ubuntu/backup_dataset。hdfs://指定源集群和目标集群的NameNode地址,实现集群间数据同步。hdfs dfs -distcp hdfs://source-cluster:9000/user/ubuntu/source /hdfs://destination-cluster:9000/user/ubuntu/target。若无需保留本地文件,可使用moveFromLocal命令,将本地文件直接移动到HDFS,本地文件会被自动删除,适合释放本地存储的场景。
示例:hdfs dfs -moveFromLocal /home/ubuntu/local_file.txt /user/ubuntu/hdfs_destination/。
通过Hadoop Java API可实现定制化数据传输,适合集成到大数据应用中。需配置Hadoop环境(core-site.xml、hdfs-site.xml),使用FileSystem类的copyFromLocalFile方法。
示例代码:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HDFSUpload {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000"); // 设置HDFS地址
FileSystem fs = FileSystem.get(conf); // 获取HDFS文件系统对象
Path localPath = new Path("/home/ubuntu/local_file.txt"); // 本地文件路径
Path hdfsPath = new Path("/user/ubuntu/hdfs_destination/"); // HDFS目标路径
fs.copyFromLocalFile(localPath, hdfsPath); // 执行上传
fs.close(); // 关闭资源
System.out.println("文件上传成功!");
}
}
编译运行前需将Hadoop jar包添加到classpath,确保程序能访问HDFS。
hadoop用户),或使用sudo -u hadoop指定用户,避免权限不足错误。distcp)建议在业务低峰期进行,避免占用过多带宽影响其他服务。hdfs dfs -checksum命令对比源文件和目标文件的校验值。