HDFS读文件解析
下图描述了在文件读过程中, client、NameNode和DataNode三者之
间是如何互动的。
1. client调用 get方法得到 HDFS文件系统的一个实例
(DistributedFileSystem)。然后调用它的 open方法。
2. DistributedFileSystem通过 RPC远程调用 NameNode决定文件文件的
block的位置信息。对于每一个 bolck,NameNode返回 block所在的
DataNode(包括副本)的地址。 DistributedFileSystem返回
FSDataInputStream给client用来读数据。 FSDataInputStream封装了
DFSInputStream用于管理 NameNode和DataNode的 IO。
3. client调用 FSDataInputStream的read方法。
4. DFSInputStream保存了 block块所在的 DataNode的地址信息。
DFSInputStream连接第一个 block的DataNode,read block数据,传回给
client。
5. 当第一个 block读完, DFSInputStream关掉与这个 DataNode的连
接。然后开始第二个 block。
6. 当client读结束,调用 FSDataInputStream的close方法。
在读的过程中,如果 client和一个 datanode通讯时出错,他会连接副
本所在的 datanode。这种 client直接连接 datanode读取数据的设计方法使
HDFS可以同时相应很多 client的同时并发。因为数据流量均匀的分布在
所有的 datanode上,NameNode只负责 block的位置信息请求。
HDFS写文件解析
我们看一下创建文件,写文件最后关闭文件的流程。如下图:
1. client通过调用 DistributedFileSystem的create方法来创建文件。
2. DistributedFileSystem通过 RPC调用NameNode在文 件系统的名字
空间里创建一个文件,这个时候还没有任何 block信息。
DistributedFile
Node/文件/Stream/block/client/调用/Data/Distributed/FileSystem/方法/
Node/文件/Stream/block/client/调用/Data/Distributed/FileSystem/方法/
-->