Hadoop Java API 操纵 HDFS 文件超详细指南

打印 上一主题 下一主题

主题 954|帖子 954|积分 2862

        在大数据处理领域,Hadoop 是当之无愧的核心工具之一,而其 Java API 为开辟者提供了强大的功能来操纵 HDFS(Hadoop Distributed File System)。本文将详细先容如何利用 Hadoop Java API 在 HDFS 上举行文件的写入、读取以及本地文件上传操纵,并涵盖项目打包摆设到 Hadoop 集群的完整流程,同时对相关题目举行深入探讨。
 一、HDFS 写文件操纵

(一)实现思路分析

       首先,需创建一个普通 Java 项目并界说 Main Class。接着,利用 Configuration 对象来配置 Hadoop 集群的相关信息,其中关键的一步是通过 set 方法将 fs.defaultFS 设置为目的 Hadoop 集群的地址,例如 “hdfs://803425 - hadoop01”。随后,借助 FileSystem.get (...) 方法获取 FileSystem 对象,这是后续操纵的核心入口。再调用 FileSystem 对象的 create (...) 方法创建一个 FSDataOutputStream 对象,该对象犹如一条数据管道,负责将数据精准写入 HDFS 文件。最后,利用 FSDataOutputStream 对象的 writeUTF (...) 或 write (...) 方法将准备好的数据写入文件,并利用 hdfs - cat 命令验证写入结果。
(二)演示代码解读

  1. import org.apache.hadoop.conf.Configuration;
  2. import org.apache.hadoop.fs.FSDataOutputStream;
  3. import org.apache.hadoop.fs.FileSystem;
  4. import org.apache.hadoop.fs.Path;
  5. import java.io.IOException;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. public class WriteToHdfsDemo {
  9.     public static void main(String[] args) throws IOException {
  10.         Configuration conf = new Configuration();
  11.         conf.set("fs.defaultFs", "hdfs://803425-hadoop01");
  12.         // 准备测试数据
  13.         List<String> data = new ArrayList<>();
  14.         data.add("hello hdfs\n");
  15.         data.add("i love 1z\n");
  16.         data.add("我来自广西");
  17.         FileSystem fs = FileSystem.get(conf);
  18.         // 创建一个文件,路径为/dir3/ram-to-dfs.txt,如果/dir3目录不存在,会自动创建
  19.         FSDataOutputStream out = fs.create(new Path("/dir3/ram-to-dfs.txt"));
  20.         // 将data对象的数据写到hdfs
  21.         for (String d : data) {
  22.             // d.getBytes(StandardCharsets.UTF_8)的作用是将UTF-8字符串转成字节数组
  23.             out.write(d.getBytes(StandardCharsets.UTF_8));
  24.         }
  25.         out.flush();
  26.         out.close();
  27.         fs.close();
  28.     }
  29. }
复制代码
      在上述代码中,先初始化 Configuration 并设置 HDFS 地址,然后创建测试数据列表。获取 FileSystem 实例后,创建目的文件输出流,将数据以字节情势写入文件,写入完成后依次关闭输出流和 FileSystem,确保资源正确释放。
二、HDFS 读文件操纵

(一)实现思路详解

        同样先创建 Java 项目和 Main Class,配置 Configuration 对象后获取 FileSystem 对象。通过调用 FileSystem 对象的 open (...) 方法获取 FSDataInputStream 对象,用于读取 HDFS 文件数据。为了高效地读取和处理数据,创建 BufferedReader 对象来缓存输入流中的字符。最后,利用 BufferedReader 的 readLine () 方法逐行读取文件内容并输出到控制台,方便查看和分析。
(二)示例代码剖析 

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import org.apache.hadoop.conf.Configuration;
  5. import org.apache.hadoop.fs.FSDataInputStream;
  6. import org.apache.hadoop.fs.FileSystem;
  7. import org.apache.hadoop.fs.Path;
  8. public class ReadFromHdfsDemo {
  9.     public static void main(String[] args) throws IOException {
  10.         Configuration conf = new Configuration();
  11.         conf.set("fs.defaultFs", "hdfs://803425-hadoop01");
  12.         FileSystem fs = FileSystem.get(conf);
  13.         FSDataInputStream in = fs.open(new Path("/dir3/ram-to-dfs.txt"));
  14.         BufferedReader reader = new BufferedReader(new InputStreamReader(in));
  15.         String line = reader.readLine();
  16.         while (null!= line) {
  17.             System.out.println(line);
  18.             line = reader.readLine();
  19.         }
  20.         reader.close();
  21.         fs.close();
  22.     }
  23. }
复制代码
      此代码先完成 Hadoop 环境配置和文件系统连接,打开目的文件输入流后,借助 BufferedReader 按行读取数据并打印,直至读取到文件末端,最后关闭相关资源,包管步伐的妥当性。
三、本地文件上传至 HDFS 操纵

(一)实现思路阐释

       项目初始化步调与前文雷同,创建 Configuration 和 FileSystem 对象后,通过 FileSystem 的 create (...) 方法获取 FSDataOutputStream 对象用于 HDFS 文件写入。然后,利用 FileInputStream 的有参构造函数创建一个对象,使其与指定的本地文件建立连接,读取本地文件数据。最后,借助 Hadoop 提供的 IOUtils.copyBytes (...) 方法,高效地将本地文件数据传输到 HDFS 文件,实现文件上传功能。
(二)演示代码说明 

  1. import java.io.FileInputStream;
  2. import java.io.IOException;
  3. import org.apache.hadoop.io.IOUtils;
  4. import org.apache.hadoop.fs.FileSystem;
  5. import org.apache.hadoop.fs.FSDataOutputStream;
  6. import org.apache.hadoop.fs.Path;
  7. import org.apache.hadoop.conf.Configuration;
  8. public class DiskToDfsDemo {
  9.     public static void main(String[] args) throws IOException {
  10.         Configuration conf = new Configuration();
  11.         conf.set("fs.defaultFs", "hdfs://803425-hadoop01");
  12.         FileSystem fs = FileSystem.get(conf);
  13.         // 创建一个文件流,和指定的本地文件(此处演示,该本地文件为当前项目目录下的ip.txt)建立连接
  14.         FileInputStream in = new FileInputStream("ip.txt");
  15.         FSDataOutputStream out = fs.create(new Path("/dir3/ip.txt"));
  16.         // 将本地文件(in对象)的字节数拷贝到HDFS文件(out对象)中
  17.         IOUtils.copyBytes(in, out, 1024);
  18.         fs.close();
  19.     }
  20. }
复制代码
        代码中先配置 Hadoop 环境并获取文件系统实例,接着创建本地文件输入流和 HDFS 文件输出流,利用 IOUtils 工具类将本地文件数据按 1024 字节缓冲区大小复制到 HDFS 文件,完成后关闭文件系统连接,确保资源有用管理。
四、项目打包与摆设到 Hadoop 集群

(一)打包流程

1.在 IntelliJ IDEA 中,通过 File -> project structure... 打开项目布局对话框。

2.在此对话框中创建 artifacts,选择 JAR 类型,并指定 Main Class 等关键信息。

3.配置好 artifacts 后,实行构建命令 build -> build artifacts...,选择 Build 举行打包操纵。打包完成后,可在项目的 out 文件夹下找到生成的 jar 包,如 HdfsDemo2024.jar。


(二)摆设与运行

       将生成的 jar 包以及 Hadoop 的相关 jar 包上传到 Hadoop 集群的任一节点。在集群节点上,利用命令 java -cp hdfs2.7.2-jars/*:./HdfsDemo2024.jar com.demo.ReadFromHdfsDemo 运行步伐,其中要根据实际环境修改路径和 Main Class 名称。别的,还可以尝试利用 java -jar xxx.jar 方式运行,这需要在 jar 包的 MANIFEST.MF 文件中正确配置 Main Class 信息,可借助相关工具举行设置。

五、常见题目与拓展思考

(一)查看其他文件内容

       在当前 ReadFromHdfsDemo 步伐中,若要查看别的一个 txt 文件内容,只需修改代码中打开文件的路径即可。例如,将 Path("/dir3/ram-to-dfs.txt") 改为目的文件的路径,如 Path("/dir3/newfile.txt"),重新打包摆设后就能读取新文件内容。
(二)运行方式选择

  java -cp xxx.jar:yyy.jar xxx.xxx.MainClass 方式适用于需要同时引用多个外部 jar 包且对类路径有精细控制的场景,而 java -jar xxx.jar 方式则更为简洁,前提是 jar 包自身的配置正确。在实际应用中,可根据项目的依靠环境和摆设环境灵活选择合适的运行方式,确保步伐能够稳定高效运行。
        通过本文的详细先容,相信读者能够纯熟掌握 Hadoop Java API 操纵 HDFS 文件的核心技能,并能顺利完成项目的开辟、打包与摆设,为大数据处理工作奠基坚实基础。在实际应用中,不停探索和优化这些操纵,将有助于提拔大数据处理的效率和质量。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表