3.3 写原理
假如我们要一个文件名字“example.txt”,248M 。

文章插图
假设block.size设置的128M,因此client会把该文件切分成两个block,分布是 128M和120M 。
每当向HDFS写数据的时候,都遵循下面的几个流程
- HDFS client 向NameNode 发送 两个blocks(blockA、blockB)的写入请求
- NameNode给client进行写入授权并提供用来进行存储和复制的DataNodes IP
- DataNodes基于HDFS可用性、复制因子和机架感知的选择是完全随机的
- 假设复制因子设置的是3,那么NameNode将为每个blocks提供3个DataNodes IP 。相对每个block提供的3个DataNodes都是唯一的 。假设NameNode提供的DataNodes列表如下:
For Block A, list A = {IP of DataNode 1, IP of DataNode 4, IP of DataNode 6}For Block B, set B = {IP of DataNode 3, IP of DataNode 7, IP of DataNode 9}
- 每个block将在三个不同的DataNode进行复制,维持整个集群的复制因子一致性
- 接下来整个数据将会经历下面三个阶段:1建立管道 2数据流与复制 3管道关闭及确认
client在blocks写入之前会确保提供的DataNodes是否已经做好接受数据的准备 。在这样的情况下,client会连接该block列表中的各个DataNodes,为每个block建一个管道 。以BlockA举例,它的DN(DataNode)列表是 { DN 1 IP,DN 4 IP, DN 6 IP }

文章插图
如上图,大概有一下几个步骤:
- client 拿着 blockA 向 NameNode发起写请求
- NameNode返回一组可供存储和复制的DN IP列表
- client向 DN1 进行写入准备确认,同时会告诉DN1接下来要进行复制的DN4和DN6的IP
- DN1 会向 DN4发起写入准备确认,依次类推DN4给DN6发送确认
- DN6 确认完毕回传给 DN4,DN4确认后会将自己以及DN6的确认信息给DN1,最后DN1将三个DN的确认结果答复给client
- 管道建立完毕,client将开始进行数据复制或者数据处理
当client与DataNodes之间的管道建立之后,client将开始将推送数据到管道 。我们这里假设的复制因子是3,所以blockA将被复制三份,但是注意的是client只会将blockA推送到DN1,然后由DataNodes自己按照顺序进行复制 。

文章插图
如上图所示,整个复制过程步骤如下:
- client 将blockA写入DN1,接着DN1连接DN4
- DN1通过管道向DN4复制数据
- DN4数据写完后会继续连接DN6进行最后一份数据的复制
当block复制3份完成后,client和NameNode会有一系列的ack确认来保证数据被成功写入 。
如下图所示,DataNodes的确认和写入的顺序恰好相反,DN6写入成功后会给DN4发送确认消息,接着DN4会将DN6和自己的确认消息发送给DN1,最后DN1将所有的确认消息发送给client,client再给NameNode确认block写入成功,然后NameNode更新对应的元数据,最终client关闭管道 。

文章插图
以上的所有流程,我们都是针对blockA进行解说,而blockB是完全一样的,blockB有自己的管道、自己的DataNodes并行的进行写入 。

文章插图
如上图所示,有两个管道分别为blokA和blockB提供,他们各自的流程顺序如下:
- For Block A: 1A -> 2A -> 3A -> 4A
- For Block B: 1B -> 2B -> 3B -> 4B -> 5B -> 6B
读的原理相对写更容易理解,我们同样以example.txt举例 。

文章插图
如上图所示,有以下几个步骤
- client请求NameNode 要读取example.txt的数据,NameNode查询元数据,将该文件对应的所有block及对应的DataNode列表返回
- client并行的分别从DataNodes读取blockA和blockB的数据 。为了保证低延迟和节约带宽,通常会选择离client近的副本进行读取,如果可能,会选择和阅读节点在同一个机架上的副本(如图中所示,选择了Rack1, blockA和blockB都有对应的副本)
- client一旦获取到所有的block,就会开始组装成文件,并返回 。
本篇先以漫画的方式阐述场景HDFS 读写流程,然后又以HDFS里的概念进行进一步的描述,相信大家已经对此有所了解 。
【图文详解HDFS工作机制】
推荐阅读
- MIUI12桌面设置详解,新手必会的八项小技巧
- linux下.tar.gz和.gz文件解压详解
- 薄荷红茶怎么做薄荷红茶的制作方法详解
- 什么是首套房?首套按揭买房流程详解
- 太极拳初学者必知:详解太极拳基本功练习方法
- 国粹太极拳种类详解
- 孕妇瑜伽体式详解
- 喝茶需注意的叩手礼动态图详解
- 在CentOS 6.5环境中安装VPN 的步骤详解
- 详解Rsync远程同步服务在windows系统下的安装和配置
