首页 理论教育 HDFS数据读写流程解析

HDFS数据读写流程解析

时间:2023-06-24 理论教育 版权反馈
【摘要】:HDFS 在读写数据中的工作流程由三部分组成,即客户端、NameNode 和DataNode。图3.18读取数据流程下面详细介绍HDFS 在读写数据中的工作流程:①客户端通过Distributed FileSystem 向NameNode 请求下载文件,NameNode 中存储着文件的元数据,通过查找其元数据,找到Block 所在的DataNode 地址。②Distributed FileSystem 向客户端返回一个支持文件定位的输入流对象FSDataInputStream,该对象主要用来为客户端提供读取数据的功能。下面对文件写入流程进行详细介绍,在HDFS 中新文件写入的流程图如图3.19 所示。

HDFS数据读写流程解析

HDFS 在读写数据中的工作流程由三部分组成,即客户端、NameNode 和DataNode。其中,Distributed FileSystem 可以理解为HDFS 客户端的API,通过它可以实现客户端到NameNode 的调用。其读取数据流程如图3.18 所示。

图3.18 读取数据流程

下面详细介绍HDFS 在读写数据中的工作流程:

①客户端通过Distributed FileSystem 向NameNode 请求下载文件,NameNode 中存储着文件的元数据(元数据包括两个部分:a. 文件与Block 的映射表;b. Block 与DataNode 的映射表),通过查找其元数据,找到Block 所在的DataNode 地址。需要注意的是:这里NameNode 只会返回文件中开始的一部分Block,而不是全部Block。

②Distributed FileSystem 向客户端返回一个支持文件定位的输入流对象FSDataInputStream,该对象主要用来为客户端提供读取数据的功能。

③目前客户端中已经有了请求数据的DataNode 地址和一个可以读取数据的流对象,就可以读取Block 了。客户端会在输入流基础上调用Read(),连接元数据中最近的DataNode,并在数据流中重复调用Read(),直到其最近的DataNode 中的Block 读取完毕,关闭对该DataNode 的连接;然后查找存储下一个数据块距离客户端最近的DataNode,循环往复直至读取完毕,调用Close()关闭流操作。

需要注意的是:如果所连接的DataNode 在读取中出现故障,客户端就会尝试连接存储这个Block 的下一个最近DataNode,并记录该节点故障情况,以防再重新连接浪费资源。(www.xing528.com)

下面对文件写入流程进行详细介绍,在HDFS 中新文件写入的流程图如图3.19 所示。

图3.19 写入数据流程

①客户端通过Distributed FileSystem 向NameNode 请求上传文件。

②NameNode 检查目标文件是否存在,并验证新文件是否存在于文件系统中且客户端拥有创建文件权限。若可以上传,Distributed FileSystem 返回一个FSDataOutputStream 用于客户端写入数据。

③FSDataOutputStream 会将文件分割成多个文件包,并拼接成队列,将用于上传的合适DataNode 组成一个通信管道。

④客户端调用DataStreamer 开始向DataNode 上传文件包。DataStreamer 在创建文件流时,已经初始化,其主要作用是将队列中的文件包以流的方式发送到第一个DataNode,然后将其推送给第二个DataNode,直到最后一个DataNode。

⑤当文件数据上传成功以后,调用Close()方法关闭数据流。这步操作会在连接NameNode确认文件写入完成之前将所有剩下的文件包放入DataNode 管道,等待通知确认信息。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈