简介
本文主要介绍客户端及与之交互的HDFS、NameNode和DataNode之间的数据流的工作机制。
NameNode和DataNode介绍
在了解数据流工作机制之前,我们先来了解一下NameNode和DataNode。
HDFS集群有两类节点以管理者-工作者模式运行,即一个NameNode和多个DataNode。NameNode管理文件系统的命名空间,维护文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。NameNode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时由数据节点重建。
DataNode是文件系统的工作节点。它们根据需要存储并检索数据块(受客户端或NameNode调度),并且定期向NameNode发送它们所存储的块的列表。
客户端(client)代表用户通过与NnameNode和DataNode交互来访问整个文件系统。客户端提供一个类似于POSIX的文件系统接口,因此用户在编程时无需知道NameNode和DataNode也可以实现其功能。
剖析文件读取
下面的例子是将HDFS文件系统中的文本输出到标准输出上。
// cc FileSystemCat Displays files from a Hadoop filesystem on standard output by using the FileSystem directly
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;
import org.apache.hadoop.io.IOUtils;
// vv FileSyst