HDFS写数据流程

在客户端上传文件:hadoop hf -put xxx.txt时,流程如下图所示:

HDFS写数据流程

1.客户端向NameNode发送上传文件请求:hadoop hf -put xxx.avi  /aaa

2.NameNode对客户端进行响应,文件系统可以上传文件;

3.客户端通过rpc请求NameNode上传第一个block文件块,块的大小默认是128MB,主要是请求文件系统下将block写到哪个dataNode。

4.NameNode选择DataNode,选择策略是空间和距离,空间是dataNode磁盘大小,距离主要是网络的ip段,经过路由器的个数,具体做法:

    (1)第一个dataNode应与客户端在同一ip下(同一机架),或者最近的(根据网络段进行判断)

    (2)第二个dataNode考虑与客户端不在同一网段下(ip),主要是提高系统的可靠性;

   (3)第三个dataNode应与client端在同一ip下;

。。。。三个副本的情况。。。。。。

注:hadoop通过配置文件(机架感知配置文件)知道dataNode的距离;

5.client向第1个dataNode发送建立block传输通道channel,第1个dataNode将该请求发送到第2个dataNode,第二个dataNode将该请求发送第3个dataNode,直到第n-1个dataNode将该请求发送到第n个dataNode;

6.第n个接收请求的dataNode将相应成功信息传递到第n-1个dataNode,直到第1个dataNode,第1个dataNode将应答信息传递给客户端;

7.第一个block开始上传,以数据包packet为单位进行传送:

    (1)对每个block进行校验

    (2)将每个packet包放到第1个dataNode的缓存ByteBuff中,

    (3)第1个dataNode将ByteBuff中的数据写入到block中;

    (4)第1个dataNode的缓存ByteBuff中数据传送到第2个dataNode的bytebuff,然后第2个bytebuffer将数据写入block块中,第2个bytebuffer传送到第3个dataName以此类推。

备注

(1)只要一个block块上传成功,就算成功,之后nameNode会做异步的同步

(2)每上传一个block块,client都需要向nameNode发送请求