import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
// ... 其他方法和 HShell 类的实现 ...
private void copyFile(String localPath, String hdfsPath) throws IOException {
// 创建Hadoop的配置对象
Configuration conf = new Configuration();
// 获取本地文件系统和HDFS的FileSystem对象
FileSystem localFs = FileSystem.getLocal(conf);
FileSystem hdfs = FileSystem.get(conf);
// 检查本地文件是否存在
if (!localFs.exists(new Path(localPath))) {
System.out.println("本地文件 " + localPath + " 不存在。");
return;
}
// 打开本地文件的输入流
FSDataInputStream in = null;
// 打开HDFS文件的输出流
FSDataOutputStream out = null;
try {
in = localFs.open(new Path(localPath));
out = hdfs.create(new Path(hdfsPath), true);
// 缓冲区用于存储从输入流读取的数据
byte[] buffer = new byte[8192];
int bytesRead;
// 循环读取本地文件并写入到HDFS
while ((bytesRead = in.read(buffer)) > 0) {
out.write(buffer, 0, bytesRead);
}
// 文件拷贝完成,刷新输出流
out.hflush();
System.out.println("文件 " + localPath + " 已成功复制到 " + hdfsPath);
} finally {
// 关闭流资源
IOUtils.closeStream(in);
IOUtils.closeStream(out);
// 关闭FileSystem对象
localFs.close();
hdfs.close();
}
}
copyFile
于 2024-04-10 16:04:15 首次发布
本文介绍了如何使用ApacheHadoop的JavaAPI在Java程序中实现将本地文件复制到Hadoop分布式文件系统(HDFS)的过程,包括创建配置、打开文件流以及处理异常的详细步骤。
摘要由CSDN通过智能技术生成