HDFS Java API 基本操作实验

Apache Hadoop Distributed File System (HDFS) 是 Hadoop 生态系统中的一部分,用于存储大数据集。HDFS 提供了一个 Java API,允许开发者在 Java 应用程序中执行 HDFS 的基本操作,如创建目录、上传文件、读取文件、删除文件等。

以下是一个简单的 HDFS Java API 基本操作实验,展示了如何使用 Java API 与 HDFS 交互:

1. 准备工作

确保你已经安装了 Hadoop,并且 HDFS 服务正在运行。你还需要一个 Java 开发环境,并添加了 Hadoop 的相关 JAR 包到你的项目依赖中。

2. 编写 Java 代码

java 复制代码
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;

public class HdfsBasicOperations {

    public static void main(String[] args) throws IOException {
        // 1. 配置 Hadoop 环境
        Configuration conf = new Configuration();
        // 如果你的 Hadoop 集群不是本地运行,需要设置 fs.defaultFS
        // conf.set("fs.defaultFS", "hdfs://<your-namenode-host>:<port>");

        // 2. 获取 FileSystem 实例
        FileSystem fs = FileSystem.get(URI.create("hdfs://localhost:9000"), conf);

        // 3. 创建一个目录
        Path dirPath = new Path("/user/hadoop/testdir");
        if (!fs.exists(dirPath)) {
            fs.mkdirs(dirPath);
            System.out.println("Directory created: " + dirPath);
        }

        // 4. 上传一个文件到 HDFS
        Path filePath = new Path("/user/hadoop/testdir/testfile.txt");
        BufferedInputStream in = null;
        FSDataOutputStream out = null;
        try {
            in = new BufferedInputStream(new FileInputStream("localfile.txt"));
            out = fs.create(filePath);
            IOUtils.copyBytes(in, out, 4096, true);
            System.out.println("File uploaded to HDFS: " + filePath);
        } finally {
            IOUtils.closeStream(in);
            IOUtils.closeStream(out);
        }

        // 5. 读取 HDFS 上的文件内容
        in = null;
        BufferedOutputStream bos = null;
        try {
            in = new BufferedInputStream(fs.open(filePath));
            bos = new BufferedOutputStream(new FileOutputStream("downloadedfile.txt"));
            IOUtils.copyBytes(in, bos, 4096, true);
            System.out.println("File downloaded from HDFS: " + filePath);
        } finally {
            IOUtils.closeStream(in);
            IOUtils.closeStream(bos);
        }

        // 6. 删除 HDFS 上的文件
        if (fs.exists(filePath)) {
            fs.delete(filePath, true);
            System.out.println("File deleted from HDFS: " + filePath);
        }

        // 7. 关闭 FileSystem
        fs.close();
    }
}

3. 编译和运行

使用 javac 编译 Java 代码,并使用 java 命令运行它。确保 Hadoop 的相关 JAR 包在类路径中可用。

4. 注意事项

  • 在运行代码之前,确保 HDFS 服务正在运行,并且你的 Java 程序有足够的权限来执行这些操作。
  • 根据你的 Hadoop 集群配置,可能需要修改 fs.defaultFS 的值。
  • 在这个示例中,我们使用 localfile.txt 作为本地文件,它应该存在于你的本地文件系统中。
  • 我们将文件下载到本地系统的 downloadedfile.txt 文件中。你可以根据需要更改这些文件名和路径。
  • 在处理完 HDFS 操作后,确保关闭 FileSystem 实例以释放资源。
相关推荐
Goldn.5 小时前
Java核心技术栈全景解析:从Web开发到AI融合
java· spring boot· 微服务· ai· jvm· maven· hibernate
李慕婉学姐6 小时前
【开题答辩过程】以《基于Android的出租车运行监测系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·后端·vue
m0_740043736 小时前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
编织幻境的妖6 小时前
SQL查询连续登录用户方法详解
java·数据库·sql
未若君雅裁6 小时前
JVM面试篇总结
java·jvm·面试
kk哥88997 小时前
C++ 对象 核心介绍
java·jvm·c++
招风的黑耳7 小时前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端
xunyan62347 小时前
面向对象(下)-接口的理解
java·开发语言
程序员游老板7 小时前
基于SpringBoot3+vue3的爱心陪诊平台
java·spring boot·毕业设计·软件工程·课程设计·信息与通信
期待のcode7 小时前
Springboot核心构建插件
java·spring boot·后端