本篇翻译来自 Hadoop权威指南 2015版 Tom White著
Anatomy of a File Write
文件写入的剖析
此处引入创建新文件,写入内容和关闭文件的案例来描述hdfs写入的相关模型。
- Client首先调用create方法来穿件DistributedFileSystem(DFS),DFS会根据RPC call来交互namenode,会让nn来创建一个不关联任何blocker的一个空文件,此时nn会检查nn node下的文件, 来确保这个文件不存在,并且client有合理的权限来操作。如果检查通过可,nn就会创建该文件,否则会跑出IOException。DFS会返回client一个FSDataOutputStream,FSDataOutputStream会生成一些DFSOutputStream来处理与nn和dn的通信交互。
- DFSOutputStream会把write data 分解成为packets, 然后这些packets会进入一个内部队列,称为data queue,这个data queue会被dataStreamer消费。
- Datastreamer会向nn申请可以存储data的blockers,nn会把合适(suitable)的datanode 列表返回给Datastream。
- Datastreamer会根据dn清单和副本情况,形成一个pipeline来消费packets,比如说有replica=3,那么packet会先存储在第一个(client本地)dn上,然后forward给第二个副本(不同rack的node上),然后第二个forward给第三个副本(第二个副本rack上的不同node)。
- 一旦每个node上都完