hadoop系列(5)---Hadoop读写流程

·  阅读 114

HDFS写流程

「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

NameNode负责管理存储在HDFS上所有文件的元数据 ,它会确认客户端的请求,并记录下文件的名字和存储这个文件的DataNode集合。它把该信息存储在内存中的文件分配表里。

例如:客户端发送一个请求给NameNode,说它要将J.log文件写入到HDFS。那么,其执行流程如图1所示。具体为: HDFS写 图1 HDFS写过程示意图

hadoopwrite.jpg

  • 第一步:客户端发消息给NameNode,说要将J.log文件写入。(如图1中的①)

  • 第二步:NameNode发消息给客户端,叫客户端写到DataNode A、B和D,并直接联系DataNode B。(如图1中的②)

    • Client和NN连接创建文件元数据
    • NN判定元数据是否有效
    • NN处发副本放置策略,返回一个有序的DN列表
  • 第三步:客户端发消息给DataNode B,叫它保存一份J.log文件,并且发送一份副本给DataNode A和DataNode D。(如图1中的③)

    • 客户端将块切分成packet(64KB),并使用chunk(512B)+chucksum(4B)填充
    • 客户端将packet放入发送队列dataqueue中,并向第一个DN发送
  • 第四步:DataNode B发消息给DataNode A,叫它保存一份J.log文件,并且发送一份副本给DataNode D。(如图1中的④)

  • 第五步:DataNode A发消息给DataNode D,叫它保存一份J.log文件。(如图1中的⑤)

  • 第六步:DataNode D发确认消息给DataNode A。(如图1中的⑤)

  • 第七步:DataNode A发确认消息给DataNode B。(如图1中的④)

  • 第八步:DataNode B发确认消息给客户端,表示写入完成。(如图1中的⑥)

在分布式文件系统的设计中,挑战之一是如何确保数据的一致性 。

对于HDFS来说,直到所有要保存数据的DataNodes确认它们都有文件的副本时,数据才被认为写入完成。因此,数据一致性是在写的阶段完成的。一个客户端无论选择从哪个DataNode读取,都将得到相同的数据。

HDFS读过程

为了理解读的过程,可以认为一个文件是由存储在DataNode上的数据块组成的。客户端查看之前写入的内容的执行流程如图2所示,具体步骤为:HDFS读写图2 HDFS读过程示意图

hadoopread.jpg

第一步:客户端询问NameNode它应该从哪里读取文件。(如图2中的①)

第二步:NameNode发送数据块的信息给客户端。(数据块信息包含了保存着文件副本的DataNode的IP地址,以及DataNode在本地硬盘查找数据块所需要的数据块ID。) (如图2中的②)

第三步:客户端检查数据块信息,联系相关的DataNode,请求数据块。(如图2中的③)

第四步:DataNode返回文件内容给客户端,然后关闭连接,完成读操作。(如图2中的④)

客户端并行从不同的DataNode中获取一个文件的数据块,然后联结这些数据块,拼成完整的文件。

为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本。
如果在读取程序的同一个机架上有一个副本,那么就读取该副本。
如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本。

语义:下载一个文件:
客戶端和NN交互文件元数据获取fileBlockLocation
NN会按距离策略排序返回
客戶尝试下载block并校验数据完整性
语义:下载一个文件其实是获取文件的所有的block元数据,那么子集获取某些block应该成立
Hdfs支持client给出文件的offset自定义连接哪些block的DN,自定义获取数据
这个是支持计算层的分治、并行计算的核心
复制代码
分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改