下面以一个文件File A(大小100 MB)为例,说明HDFS的工作原理。
6.1.4.1 HDFS的读操作
HDFS的读操作原理较为简单,Client要从DataNode上读取File A。而File A由Block1和Block2组成。其流程如图6-3所示。
图6-3 HDFS读操作流程
左侧为Client,即客户端。FileA分成两块,Block1和Block2。
右侧为Switch,即交换机。HDFS按默认配置将文件分布在3个机架上Rack1、Rack2、Rack3。
过程步骤如下:
(1)连线①:Client向NameNode发送读请求。
(2)连线②:NameNode查看Metadata信息,返回File A的Block的位置。
Block1位置:host2,host1,host3(如图6-3浅色背景);Block2位置:host7,host8,host4(如图6-3深色背景)。
(3)Block的位置是有先后顺序的,先读Block1,再读Block2。而且Block1去host2上读取,然后Block2去host7上读取。
在读取文件过程中,DataNode向NameNode报告状态。每个DataNode会周期性地向NameNode发送心跳信号和文件块状态报告,以便NameNode获取到工作集群中DataNode状态的全局视图,从而掌握它们的状态。如果存在DataNode失效的情况时,NameNode会调度其他DataNode执行失效节点上文件块的读取处理。
6.1.4.2 HDFS的写操作
HDFS中Client写入文件File A的原理,其流程如图6-4所示。
(1)Client将FileA按64MB分块。分成两块,Block1和Block2。
(2)连线①:Client向NameNode发送写数据请求。(www.xing528.com)
(3)连线②:NameNode记录着Block信息,并返回可用的DataNode。
Block1位置:host2,host1,host3可用(如图6-4浅色背景);Block2位置:host7,host8,host4可用(如图6-4深色背景)。
图6-4 HDFS写操作流程
(4)Client向DataNode发送Block1,发送过程是以流式写入。流式写入过程如下:
①将64MB的Block1按64KB大小划分成package。
②Client将第一个package发送给host2。
③host2接收完,将第一个package发送给host1;同时Client向host2发送第二个package。
④host1接收完第一个package后,发送给host3;同时接收host2发来的第二个package。
⑤以此类推,直到将Block1发送完毕。
⑥host2,host1,host3向NameNode,host2向Client发送通知,说明消息发送完毕。
⑦Client收到host2发来的消息后,向NameNode发送消息,说明写操作完成。这样就完成Block1的写操作。
⑧发送完Block1,再向host7,host8,host4发送Block2。
⑨发送完Block2,host7,host8,host4向NameNode;host7向Client发送通知。
⑩Client向NameNode发送消息,说明写操作完成。
在写文件过程中,每个DataNode会周期性地向NameNode发送心跳信号和文件块状态报告。如果存在DataNode失效的情况,NameNode会调度其他DataNode执行失效节点上文件块的复制处理,保证文件块的副本数达到规定数量。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。