java下载hdfs文件_java实现下载hdfs文件及文件夹
时间: 2023-08-30 07:06:28 浏览: 226
您好,要在Java中下载HDFS文件或文件夹,可以使用Hadoop API中的FileSystem类。
以下是下载HDFS文件的示例代码:
```java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
public class HDFSFileDownload {
public static void main(String[] args) throws IOException, URISyntaxException {
String hdfsUri = "hdfs://localhost:9000";
String filePath = "/user/hadoop/example.txt";
String localPath = "example.txt";
Configuration config = new Configuration();
// 设置HDFS的URI
config.set("fs.defaultFS", hdfsUri);
// 创建HDFS文件系统对象
FileSystem fs = FileSystem.get(new URI(hdfsUri), config);
// 创建HDFS文件路径对象
Path hdfsPath = new Path(filePath);
// 创建本地文件路径对象
Path localPathObj = new Path(localPath);
// 打开HDFS文件输入流
OutputStream outputStream = fs.create(localPathObj);
// 从HDFS文件中复制数据到本地文件
fs.copyToLocalFile(hdfsPath, localPathObj);
// 关闭输出流和文件系统
outputStream.close();
fs.close();
}
}
```
要下载HDFS文件夹,可以使用递归函数来遍历文件夹中的所有文件并下载它们。以下是示例代码:
```java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class HDFSFolderDownload {
public static void main(String[] args) throws IOException, URISyntaxException {
String hdfsUri = "hdfs://localhost:9000";
String folderPath = "/user/hadoop/example";
String localPath = "example";
Configuration config = new Configuration();
// 设置HDFS的URI
config.set("fs.defaultFS", hdfsUri);
// 创建HDFS文件系统对象
FileSystem fs = FileSystem.get(new URI(hdfsUri), config);
// 创建HDFS文件夹路径对象
Path hdfsFolderPath = new Path(folderPath);
// 创建本地文件夹路径对象
Path localFolderPath = new Path(localPath);
// 如果本地文件夹不存在,则创建它
if (!localFolderPath.exists()) {
localFolderPath.mkdir();
}
// 遍历HDFS文件夹并下载所有文件
downloadFolder(fs, hdfsFolderPath, localFolderPath);
// 关闭文件系统
fs.close();
}
public static void downloadFolder(FileSystem fs, Path hdfsFolderPath, Path localFolderPath) throws IOException {
// 获取HDFS文件系统中的所有文件和文件夹
Path[] pathList = fs.listPaths(hdfsFolderPath);
// 遍历文件和文件夹
for (Path path : pathList) {
if (fs.isDirectory(path)) {
// 如果是文件夹,则递归下载它
Path localPath = new Path(localFolderPath, path.getName());
downloadFolder(fs, path, localPath);
} else {
// 如果是文件,则下载它
Path localPath = new Path(localFolderPath, path.getName());
fs.copyToLocalFile(path, localPath);
}
}
}
}
```
希望这些代码能够帮助到您!
阅读全文