想弄清楚 HDFS 怎么读写,最好从你写的 Java 代码开始。在 Hadoop 里,FileSystem 是统一的文件系统抽象层,HDFS 对应的具体实现是 DistributedFileSystem。打开文件时,FileSystem.open() 返回一个 FSDataInputStream,底子里其实是 DFSInputStream;创建文件用的 create() 返回 FSDataOutputStream,对应 DFSOutputStream。搞明白这几个类的分工,再跟内部流程就对得上号了。
读数据
先看一段最精简的读文件代码:
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);
BufferedReader ( (in));
reader.readLine();
System.out.println(content);
reader.close();
in.close();
fs.close();
} (Exception e) {
e.printStackTrace();
}
}
}




