HDFS的读写流程步骤(附图文解析)
1、HDFS的写入流程:
详细步骤:
- client 发起文件上传请求,通过 RPC 与 NameNode 建立通讯,NameNode 检查目标文件是否已存在,父目录是否存在,返回是否可以上传;
- client 请求第一个 block 该传输到哪些 DataNode 服务器上;
- NameNode 根据配置文件中指定的备份数量及副本放置策略进行文件分配,返回可用的 DataNode 的地址,如:A,B,C;
- client 请求3台 DataNode 中的一台A上传数据(本质上是一个 RPC 调用,建立 pipeline),A收到请求会继续调用B,然后B调用C,将整个 pipeline 建立完成,后逐级返回 client;
- client 开始往A上传第一个 block(先从磁盘读取数据放到一个本地内存缓存),以 packet 为单位(默认64K),A收到一个 packet 就会传给B,B传给C;A每传一个 packet 会放入一个应答队列等待应答。
- 数据被分割成一个个 packet 数据包在 pipeline 上依次传输,在 pipeline 反方向上,逐个发送 ack(ack 应答机制),最终由pipeline中第一个 DataNode 节点A将 pipeline ack 发送给client;
- 当一个 block 传输完成之后,client 再次请求 NameNode 上传第二个 block 到服务器。
2、HDFS的读取流程:
详细步骤:
- Client 向 NameNode 发起 RPC 请求,来确定请求文件 block 所在的位置;
- NameNode 会视情况返回文件的部分或者全部 block 列表,对于每个 block,NameNode 都会返回含有该 block 副本的 DataNode 地址;
- 这些返回的 DataNode 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离Client近的排靠前;心跳机制中超时汇报的 DataNode 状态为 STALE,这样的排靠后;
- Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是 DataNode,那么将从本地直接获取数据;底层上本质是建立 Socket Stream(FSDataInputStream),重复的调用父类 DataInputStream 的 read 方法,直到这个块上的数据读取完毕;
- 当读完列表的 block 后,若文件读取还没有结束,客户端会继续向 NameNode 获取下一批的 block 列表;
- 读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,客户端会通知 NameNode,然后再从下一个拥有该 block 副本的 DataNode 继续读。
- read 方法是并行的读取 block 信息,不是一块一块的读取;NameNode 只是返回 Client 请求包含块的 DataNode 地址,并不是返回请求块的数据;
- 最终读取来所有的 block 会合并成一个完整的最终文件。
最后
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。
HDFS的读写流程步骤(附图文解析)相关推荐
- HDFS文件读写流程
1.HDFS文件读取流程: 2.HDFS写入文件流程 转载于:https://www.cnblogs.com/shijiaoyun/p/5790344.html
- Hadoop中HDFS的读写流程详解
一.HDFS写流程示意图: (1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在,检查客户端是否有权限 ...
- 当初我要是这么学习JVM就好了「附图文解析」
文章目录 1. JVM 简介 2. JVM 运行流程 3. JVM 运行时数据区 3.1 程序计数器「线程私有」 3.2 Java虚拟机栈「线程私有」 3.3 本地方法栈「线程私有」 3.4 堆「线程 ...
- 当初我要是这么学习Java多线程就好了「附图文解析」
文章目录 1. 概念篇 1.1 认识进程 1.2 进程性质 1.3 操作系统如何管理进程 1.4 多线程和多进程 1.5 时间片 1.6 并发与并行 1.7 内核态与用户态 1.8 进程中的上下文 1 ...
- [Hadoop基础]--HDFS的读写流程和原理
感谢原文作者:https://www.jianshu.com/p/29ebfbd766e6 根据Maneesh Varshney的漫画改编,以简洁易懂的漫画形式讲解HDFS的存储机制与运行原理. 1. ...
- 当初我要是这么学习二叉树就好了「附图文解析」
目录 1. 树形结构 1.1 概念(了解) 1.2 概念(重要) 1.3 树的表示形式 1.4 树的应用 2. 二叉树(BinaryTree重点) 2.1 概念 2.2 二叉树的5种基本形态 2.3 ...
- hdfs读写流程_一篇文章搞清楚 HDFS 基本原理
随着互联网的发展,数据日益增多,增长超过了单机能够处理的上线,数据如何存储和处理成为了科技公司的难题,随着google的三篇论文的发布,大家终于找到了一个方案-分布式文件系统+MapReduce.Ha ...
- 详细介绍HDFS的API实操与读写流程
第 1 章 HDFS 概述 定义 是一个文件系统,是分布式的 使用场景 适合一次写入,多次读出的场景 优点 高容错性.适合处理大数据.可构建在廉价机器上 缺点 不适合低延时数据访问.无法高效的对大量小 ...
- 二, 大数据基础架构Hadoop-HDFS入门和基本操作(基本组成, Shell操作, API操作, 读写流程) hf
一, HDFS概述 1.1 HDFS的产生背景和定义 随着数据量越来越大,我们需要把文件分布存储到多台计算机上,分布式文件管理系统作为一种管理多台机器上文件的系统应运而生, HDFS是其中的一种. H ...
最新文章
- 上次谁说要简历模板来着?来!
- 怎么关闭eureka的服务_SpringCloud微服务踩坑系列之二
- Facebook 最新力作 FBNetV3来了!相比 ResNeSt 提速 5 倍,精度不输 EfficientNet
- HDU4607(求树中的最长链)
- java的vector_java中的Vector类
- 13篇顶会!25岁成985高校博导,入职半年发ICML,网友:万点暴击
- 杰出人士的34个好习惯
- java拆分日期_Java根据控制台输入的特定日期格式拆分日期
- Java开源大全 网站
- 科技论文阅读-论文写作-citavi-Latex-word-Grammarly-1checker 小笔记
- 微信记账小程序(附源码),你值得拥有!
- 分享几个边玩儿边学的游戏App,学习从未如此轻松有趣
- python excel怎么将字母后的数字取出来_利用通配符将Excel中英文字母、中文、数字提取出来...
- 哪些人不适合吃枸杞?
- 非侵入性脑刺激和太空探索
- NLP领域论文笔记【研一下研二上】01
- js判断ie和edge是否安装Adobe Reader PDF阅读器
- 高德地图定位传值经纬度坐标为null,null
- Java进阶(十一)缓冲流
- ROS routerOS 软路由
热门文章
- JS基础 Set 用于存储任何类型的唯一值
- 参考文献怎么找?3分钟找到1000篇论文参考文献!
- 跨模态行人重识别:Deep Learning for Person Re-identification:A Survey and Outlook(行人重识别综述)
- python if函数两个并列条件怎么用,Python 并列和或者条件的使用说明
- 无法启动此程序因为计算机丢失zlib.dll,zlib1.dll怎么修复?zlib1.dll丢失解决方法及注意事项...
- unet预测图片全黑/全灰解决方案(keras)
- 微信小程序-仿朋友圈点赞评论操作面板
- 蓝桥杯少儿编程2020年8月份C++比赛每日一练
- java中如何将26个字母依次输出_Java用for循环依次打印26个英文字母,每行十个字母的代码怎么打?...
- listview qt 选中内容_演练: 操作Qt应用中的QListView