IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hadoop(四)HDFS 读写流程 -> 正文阅读

[大数据]Hadoop(四)HDFS 读写流程

HDFS 的读写流程

??HDFS 将文件切割为默认大小的块(block)存放在不同的 DataNode上;
??上传文件和读取文件是 HDFS 重要的流程;

HDFS 的写文件流程

在这里插入图片描述
图文解释:
??1、Client 连接 HDFS ,发送上传文件的请求;
??2、NameNode 响应请求,对文件进行校验;校验成功后返回要存放文件的 block 所对应的 DataNode 的信息列表;
????列如:
??????block01:dataNode1、dataNode2
??????block02:dataNode2、dataNode4
??3、Client 拿到了 dataNode 的列表后,开始上传文件;
??4、先上传 block1,按照列表将其上传到 dataNode1、dataNode2;
??5、所有的 dataNodes 列表中的数据块都上传完之后,返回确认上传信息;
??6、收到全部上传完毕的确认信息,Client 关闭文件输出流;
??7、NameNode 接收到 Client 的信息判断文件是否上传成功,如果成功就更新元数据信息;

步骤详解:
??1、使用 HDFS 提供的 Client 向 NameNode 发送RPC请求,请求上传文件;
??2、NameNode 收到请求,判断要上传的文件是否已经存在及路径是否完整及用户是否具备权限操作;
??3、NameNode 判断后,向 Client 返回说可以上传该文件;
??4、Client 将文件在逻辑上切分成多个 packets ,并在内部以数据队列 data queue 的形式对 packets 进行管理;
??5、Client 向 NameNode 申请 blocks 获取到存放 packets 及对应的副本(replicas) 的合适的 dataNodes 列表,副本数及列表的大小根据 namenode 中的 replication 来定;
????packet1 : replica1 : dataNode1
????packet1 : replica2 : dataNode2
????packet1 : replica3 : dataNode3

????packet2 : replica1 : dataNode2
????packet2 : replica2 : dataNode3
????packet2 : replica3 : dataNode4

????packet3 : replica1 : dataNode1
????packet3 : replica2 : dataNode3
????packet3 : replica3 : dataNode4

??6、Client 以管道(pipeline)形式将第一个 packet 上传到该 packet 对应的所有 replicas 中;
??7、Client 把 packet1 的第一个副本 replica1 以流的形式写入 dataNode1;
??8、dataNode1 存储了 packet1 的 replica1 之后,再将其复制为 replica2 并以 pipeline 的形式在 dataNodes 列表中的下一个 dataNode2 中,进行 replica2 的写入,之后的依次类推;
??9、列表中的最后一个 dataNode 完成传输之后,会通过 pipeline 返回给 Client 一个确认队列 ack packet;
??10、客户端根据 ack packet 返回的信息,确认 packet1 的 3 个 replica 全部传输完毕,将 data queue 中的 packet1 移除;然后进行接下来的 packet2、packet3 的传输;
??11、在传输的过程中如果某个 dataNode 出现了故障,将关闭当前的 pipeline 且将故障的 datanode 从 pipeline 中移除,剩余的 block 继续在剩下的 dataNode 中以 pipeline 的形式继续传输,且 Client 会通知 nameNode 并分配一个新的 dataNode,保持 replicas 设定的数量。
??12、完成全部 packets 的传输之后,Client 调用 close() 关闭数据流;
??13、一个 packet 只要写入最小的副本数(dfs.replication.min 默认为1)即认为该 packet 已经写入成功,而该副本作为 block 可以在集群中进行异步复制,直到达到设定的副本数(dfs.replication 默认为3);因为 NameNode 在申请 blocks 时就知道了文件由哪些 blocks 组成,所以返回成功之前 NameNode 只需要等待 blocks 完成最小的复制量就好了;

在这里插入图片描述

HDFS 的读文件流程

图文解释:
??1、使用 HDFS 提供的 Client 向 NameNode 发送RPC请求,请求读取文件;
??2、NameNode 响应请求,返回该文件全部的 blocks 的信息,dataNodes 列表
????列如:
??????block01:dataNode1、dataNode2、dataNode3
??????block02:dataNode2、dataNode3、dataNode4
??3、Client 会选择离 Client 最近的 dataNode 进行 block 的读取;如果 Client 本身就是 dataNode 节点,Client 就直接在本地读取;
??4、读取完当前的 block1 之后,Client 关闭当前 dataNode 的链接,然后寻找读取下一个 block2 的 dataNode;
??5、当读取完当前的 blocks 列表之后,发现整个文件还没有读取完,Client 会继续向 NameNode 请求下一批 blocks 的信息,再进行读取,直到读完整个文件;
??6、读取过程中,每读完一个 block 都会进行 checksum 验证;如果读取 dataNode 时出现错误,Client 将通知 NameNode 再从下一个拥有该 block 的 dataNode 继续读;

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 01:14:20  更:2022-02-19 01:14:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:42:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码