在深入 HDFS 的数据读写流程前,有必要先理清几个核心类。FileSystem 是通用文件系统的抽象基类,所有使用 Hadoop 文件系统的代码都依赖它。Hadoop 为 FileSystem 提供了多种具体实现,其中 DistributedFileSystem 就是 HDFS 的实现版本。
FileSystem.open() 方法返回输入流 FSDataInputStream,在 HDFS 中具体表现为 DFSInputStream;而 create() 方法返回输出流 FSDataOutputStream,对应具体的 DFSOutputStream。理解这些类的职责,有助于我们看清底层交互逻辑。
一、读数据的过程
下面是一个读取文件的 Java 示例,展示了如何初始化配置并获取内容:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class Chapter3 {
public static void main(String[] args) {
try {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
Path file = new Path("test");
FSDataInputStream in fs.open(file);
( (in));
reader.readLine();
System.out.println(content);
reader.close();
in.close();
fs.close();
} (Exception e) {
e.printStackTrace();
}
}
}




