21xrx.com
2025-06-23 16:12:19 Monday
文章检索 我的文章 写文章
最近我在进行一个项目
2023-06-15 17:17:15 深夜i     12     0
JavaAPI

最近我在进行一个项目,需要使用JavaAPI操作HDFS(Hadoop Distributed File System)。在这个过程中,我学习到了很多有关于如何在Java程序中使用HDFS的知识,下面跟大家分享一些。

首先,我们需要知道HDFS API中最重要的几个类:FileSystem、Path以及FSDataInputStream 和 FSDataOutputStream。其中FileSystem是所有操作的入口,Path是文件或目录的路径表示。FSDataInputStream 和 FSDataOutputStream 是输入输出流的表示,它们被用于对HDFS中的文件进行读写。

接下来,我举例说明了一些常用的HDFS操作:

读取HDFS中的文件:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HDFSReadFile {
 public static void main(String[] args) throws Exception {
  String uri = args[0];
  Configuration conf = new Configuration();
  FileSystem fs = FileSystem.get(URI.create(uri), conf);
  Path path = new Path(uri);
  BufferedReader br = new BufferedReader(new InputStreamReader(fs.open(path)));
  String line;
  while ((line = br.readLine()) != null) {
   System.out.println(line);
  }
  br.close();
  fs.close();
 }
}

上面的代码中,我们通过FileSystem.get方法获取到了一个HDFS文件系统实例。URI.create方法用来构造HDFS文件系统的URI,并将其作为参数传入到get方法中。Path表示文件或目录的路径表示,我们可以通过FileSystem.open方法获取一个FSDataInputStream对象,并通过InputStreamReader将其转换成BufferedReader对象,读取HDFS中的数据。

上传文件到HDFS:

import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HDFSUploadFile {
 public static void main(String[] args) throws Exception {
  String local = args[0];
  String uri = args[1];
  Configuration conf = new Configuration();
  FileSystem fs = FileSystem.get(URI.create(uri), conf);
  InputStream in = new FileInputStream(local);
  Path path = new Path(uri);
  if (fs.exists(path)) {
   System.out.println("File " + uri + " already exists");
   return;
  }
  FSDataOutputStream out = fs.create(path);
  byte buffer[] = new byte[256];
  int bytesRead = 0;
  while ((bytesRead = in.read(buffer)) > 0) {
   out.write(buffer, 0, bytesRead);
  }
  in.close();
  out.close();
  fs.close();
  System.out.println("Upload file to " + uri + " successfully");
 }
}

上面的代码中,我们先通过InputStream获取文件的输入流,通过FileSystem.create方法获取FSDataOutputStream对象,以便向HDFS中上传数据。在上传过程中,我们可以定义一个缓冲区,用来缓存读取到的数据,从而提高上传速度。最后运行结束后,我们需要关闭对象和文件系统实例。

删除HDFS中的文件:

import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HDFSDeleteFile {
 public static void main(String[] args) throws Exception {
  String uri = args[0];
  Configuration conf = new Configuration();
  FileSystem fs = FileSystem.get(URI.create(uri), conf);
  Path path = new Path(uri);
  if (!fs.exists(path)) {
   System.out.println("File " + uri + " does not exist");
   return;
  }
  fs.delete(path, true);
  fs.close();
  System.out.println("Delete file " + uri + " successfully");
 }
}

上面的代码中,我们通过FileSystem.delete方法来删除HDFS中的文件。第一个参数表示要删除的文件路径,第二个参数表示是否递归删除目录及其子目录下的文件。在删除时,需要保证文件存在,如果文件不存在,则输出错误信息。

以上就是我在Java中操作HDFS时的经验总结了。通过使用JavaAPI,我们可以轻松地实现各种文件读写、删除等常见操作。当然,HDFS API的功能远不止这些,下一步我将继续学习并分享更多的技术点,敬请期待。

HDFS操作,例子

标题:JavaAPI操作HDFS,让Hadoop更加便捷

  
  

评论区

    相似文章