DataNode的写操作流程

DataNode的写操作流程可以分为两部分,第一部分是写操作之前的准备工作,包括与NameNode的通信等;第二部分是真正的写操作。

一、准备工作

1、首先,HDFS client会去询问NameNoed,看哪些DataNode可以存储Block A,file.txt文件的拆分是在HDFS client中完成的,拆分成了3个Block(A B C).因为NameNode存储着整个文件系统的元数据,它知道哪个DataNode上有空间可以存储这个Block A.

2、NameNode通过查看它的元数据信息,发现DataNode1、2、7上有空间可以存储Block A,预示将此信息高速HDFS Client.

3、HDFS Client接到NameNode返回的DataNode列表信息后,它会直接联系第一个DataNode-DataNode 1,让它准备接收Block A--实际上就是建立彼此之间的TCP连接。然后将Block A和NameNode返回的所有关于DataNode的元数据一并传给DataNode1.

4、在DataNode1与HDFS Client建立好TCP连接后,它会把HDFS Client要写Block A的请求顺序传给DataNode2(在与HDFS Client建立好TCP连接后从HDFS Client获得的DataNode信息),要求DataNode2也准备好接收Block A(建立DataNode2到DataNode1的TCP连接)。

5、同上,建立DataNode2到DataNode7的TCP连接

6、当DataNode7准备好之后,它会通知DataNode2,表示可以开始接收Block A

7、同理,当DataNode2准备好之后,他会通知DataNode1,表明可以开始接收Block A

8、当HDFS Client接收到DataNode1的成功反馈信息后,说明这3个DataNode都已经准备好了,HDFS Client就会开始往这三个DataNode写入Block A

二、流程

在DataNode1 2 7都准备好接收数据后,HDFS Client开始往DataNode1写入Block A数据。同准备工作一样,当DataNode1接受完A数据后,它会顺序将Block A数据传输给DataNode2,然后DataNode2再传输给DataNode7.每个DataNode在接受完Block A 数据后,会发消息给NameNode,告诉他Block数据已经接收完毕,NameNode同时会根据它接收到的小心更新它保存的文件系统元数据信息。当Block A成功写入3个DataNode之后,DataNode1会发送一个成功消息给HDFS Client,同时HDFS Client也会发一个Block A成功写入的信息给NameNode,之后HDFS Client才能开始继续处理下一个Block:Block B。

DataNode的读操作流程:

首先,HDFS Client会先去联系NameNode,询问file.txt总共分为几个Block ,而且这些Block分别存放在哪些DataNode上。由于每个Block都会存在几个副本,所以NameNode会把file.txt文件组成的Block对应的所有DataNode列表都返回给HDFS Client.然后HDFS Client会选择DataNode列表里的第一个DataNode去读取对应的Block,比如Block A存储在DataNode 1 2 7,那么HDFS Client会到DataNode1去读取Block A,Block c存储在DataNode7 8 9那么HDFS Client就回到DataNode7去读取Block C.

最新文章

  1. gitlab 安装
  2. 多线程完成socket
  3. 关于MAC
  4. Linux复制指定目录及子目录下特定类型的文件
  5. SQL Server XML Path[转]
  6. Asp.Net Identity 深度解析 之 注册登录的扩展
  7. Docker 入门实践
  8. 解决"应用程序无法启动,因为应用程序的并行配置不正确"问题
  9. Django实战,小网站实现增删改查
  10. jquery遍历table为每一个单元格取值及赋值
  11. 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
  12. [九]基础数据类型之Boolean详解
  13. Lcd(一)显示原理
  14. LeetCode 929.Unique Email Addresses
  15. iOS多线程(上)——GCD详解(上)
  16. request.getRequestDispatcher 页面跳转,样式丢失。
  17. element-ui的回调函数Events的用法
  18. https证书的验证过程与生成方法
  19. [Leetcode]931.下降路径最小和
  20. jmeter功能按钮介绍

热门文章

  1. 目标检测之dpm---hog的最优升级版
  2. (转)关于linux挂载window下共享文件
  3. php可选缓存APC
  4. php中的func_num_args、func_get_arg与func_get_args函数
  5. 干货分享 超炫丽的HTML5/jQuery应用及代码
  6. CentOS 7 安装、配置、使用 PostgreSQL 10 安装及基础配置
  7. 获取GridView中RowCommand的当前索引行(转)
  8. 用iostat对linux硬盘IO性能进行检测
  9. 禁止选中文本JS
  10. vs2012更改默认开发环境