HDFS Java API
时间: 2025-05-23 19:09:23 浏览: 16
### HDFS Java API 使用教程
HDFS 的 Java API 提供了一种编程方式来与 Hadoop 文件系统进行交互。以下是关于如何使用 HDFS Java API 进行基本操作的详细介绍。
#### 配置环境
在使用 HDFS Java API 前,需要加载 Hadoop 的配置文件 `core-site.xml` 和 `hdfs-site.xml` 来初始化连接参数。通常可以通过创建一个 `Configuration` 对象并设置 URI 来完成此过程[^2]:
```java
// 加载默认配置
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://namenode:9000"); // 设置NameNode地址
```
#### 获取 FileSystem 实例
通过 `FileSystem.get(Configuration)` 方法可以获得一个代表当前 HDFS 的实例对象。这是执行后续所有文件操作的基础:
```java
try {
FileSystem fs = FileSystem.get(new URI("hdfs://namenode:9000"), conf);
} catch (Exception e) {
e.printStackTrace();
}
```
#### 创建目录
可以调用 `mkdirs(Path f)` 方法来创建一个新的目录结构:
```java
Path path = new Path("/testDir");
boolean isCreated = fs.mkdirs(path);
if(isCreated){
System.out.println("Directory created successfully.");
}else{
System.out.println("Failed to create directory.");
}
```
#### 上传文件到 HDFS
利用 `copyFromLocalFile()` 或者直接使用 `create()` 可以将本地文件复制至 HDFS 中[^1]:
```java
fs.copyFromLocalFile(new Path("/local/path/to/file.txt"), new Path("/hdfs/destination"));
```
或者手动控制流的方式:
```java
FSDataOutputStream outStream = fs.create(new Path("/hdfs/destination/file.txt"));
BufferedInputStream inStream = new BufferedInputStream(new FileInputStream(new File("/local/path/to/file.txt")));
IOUtils.copyBytes(inStream, outStream, 4096);
inStream.close();
outStream.close();
```
#### 下载文件从 HDFS 到本地
同样地,也可以采用 `copyToLocalFile()` 函数或将数据流读取出来保存为本地文件:
```java
fs.copyToLocalFile(false, new Path("/hdfs/source/file.txt"), new Path("/local/destination"), true);
```
或是逐字节拷贝的方法:
```java
FSDataInputStream inputStream = fs.open(new Path("/hdfs/source/file.txt"));
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(new File("/local/destination/file.txt")));
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outputStream.close();
```
#### 删除文件或目录
删除单个文件或整个目录可借助于 `delete()` 方法实现:
```java
boolean deleted = fs.delete(new Path("/path/to/delete"), true); // 第二个参数表示是否递归删除子项
if(deleted){
System.out.println("Deletion successful.");
}else{
System.out.println("Deletion failed.");
}
```
#### 查看文件状态
如果想获取某个特定路径下的元信息,则可通过 `getFileStatus()` 获得 `FileStatus` 对象[^3]:
```java
FileStatus fileStatus = fs.getFileStatus(new Path("/existing/file/or/directory"));
System.out.println("Owner:" + fileStatus.getOwner());
System.out.println("Group:" + fileStatus.getGroup());
System.out.println("Permission:" + fileStatus.getPermission());
System.out.println("Length:" + fileStatus.getLen());
```
以上即是对 HDFS Java API 的基础讲解及其典型应用案例展示。
阅读全文
相关推荐
















