1、HDFS的写入流程:

详细步骤:

  1. client 发起文件上传请求,通过 RPC 与 NameNode 建立通讯,NameNode 检查目标文件是否已存在,父目录是否存在,返回是否可以上传;
  2. client 请求第一个 block 该传输到哪些 DataNode 服务器上;
  3. NameNode 根据配置文件中指定的备份数量及副本放置策略进行文件分配,返回可用的 DataNode 的地址,如:A,B,C;
  4. client 请求3台 DataNode 中的一台A上传数据(本质上是一个 RPC 调用,建立 pipeline),A收到请求会继续调用B,然后B调用C,将整个 pipeline 建立完成,后逐级返回 client;
  5. client 开始往A上传第一个 block(先从磁盘读取数据放到一个本地内存缓存),以 packet 为单位(默认64K),A收到一个 packet 就会传给B,B传给C;A每传一个 packet 会放入一个应答队列等待应答。
  6. 数据被分割成一个个 packet 数据包在 pipeline 上依次传输,在 pipeline 反方向上,逐个发送 ack(ack 应答机制),最终由pipeline中第一个 DataNode 节点A将 pipeline ack 发送给client;
  7. 当一个 block 传输完成之后,client 再次请求 NameNode 上传第二个 block 到服务器。

2、HDFS的读取流程:

详细步骤:

  1. Client 向 NameNode 发起 RPC 请求,来确定请求文件 block 所在的位置;
  2. NameNode 会视情况返回文件的部分或者全部 block 列表,对于每个 block,NameNode 都会返回含有该 block 副本的 DataNode 地址;
  3. 这些返回的 DataNode 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离Client近的排靠前;心跳机制中超时汇报的 DataNode 状态为 STALE,这样的排靠后;
  4. Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是 DataNode,那么将从本地直接获取数据;底层上本质是建立 Socket Stream(FSDataInputStream),重复的调用父类 DataInputStream 的 read 方法,直到这个块上的数据读取完毕;
  5. 当读完列表的 block 后,若文件读取还没有结束,客户端会继续向 NameNode 获取下一批的 block 列表;
  6. 读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,客户端会通知 NameNode,然后再从下一个拥有该 block 副本的 DataNode 继续读。
  7. read 方法是并行的读取 block 信息,不是一块一块的读取;NameNode 只是返回 Client 请求包含块的 DataNode 地址,并不是返回请求块的数据;
  8. 最终读取来所有的 block 会合并成一个完整的最终文件。

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

HDFS的读写流程步骤(附图文解析)相关推荐

  1. HDFS文件读写流程

    1.HDFS文件读取流程: 2.HDFS写入文件流程 转载于:https://www.cnblogs.com/shijiaoyun/p/5790344.html

  2. Hadoop中HDFS的读写流程详解

    一.HDFS写流程示意图: (1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在,检查客户端是否有权限 ...

  3. 当初我要是这么学习JVM就好了「附图文解析」

    文章目录 1. JVM 简介 2. JVM 运行流程 3. JVM 运行时数据区 3.1 程序计数器「线程私有」 3.2 Java虚拟机栈「线程私有」 3.3 本地方法栈「线程私有」 3.4 堆「线程 ...

  4. 当初我要是这么学习Java多线程就好了「附图文解析」

    文章目录 1. 概念篇 1.1 认识进程 1.2 进程性质 1.3 操作系统如何管理进程 1.4 多线程和多进程 1.5 时间片 1.6 并发与并行 1.7 内核态与用户态 1.8 进程中的上下文 1 ...

  5. [Hadoop基础]--HDFS的读写流程和原理

    感谢原文作者:https://www.jianshu.com/p/29ebfbd766e6 根据Maneesh Varshney的漫画改编,以简洁易懂的漫画形式讲解HDFS的存储机制与运行原理. 1. ...

  6. 当初我要是这么学习二叉树就好了「附图文解析」

    目录 1. 树形结构 1.1 概念(了解) 1.2 概念(重要) 1.3 树的表示形式 1.4 树的应用 2. 二叉树(BinaryTree重点) 2.1 概念 2.2 二叉树的5种基本形态 2.3 ...

  7. hdfs读写流程_一篇文章搞清楚 HDFS 基本原理

    随着互联网的发展,数据日益增多,增长超过了单机能够处理的上线,数据如何存储和处理成为了科技公司的难题,随着google的三篇论文的发布,大家终于找到了一个方案-分布式文件系统+MapReduce.Ha ...

  8. 详细介绍HDFS的API实操与读写流程

    第 1 章 HDFS 概述 定义 是一个文件系统,是分布式的 使用场景 适合一次写入,多次读出的场景 优点 高容错性.适合处理大数据.可构建在廉价机器上 缺点 不适合低延时数据访问.无法高效的对大量小 ...

  9. 二, 大数据基础架构Hadoop-HDFS入门和基本操作(基本组成, Shell操作, API操作, 读写流程) hf

    一, HDFS概述 1.1 HDFS的产生背景和定义 随着数据量越来越大,我们需要把文件分布存储到多台计算机上,分布式文件管理系统作为一种管理多台机器上文件的系统应运而生, HDFS是其中的一种. H ...

最新文章

  1. 上次谁说要简历模板来着?来!
  2. 怎么关闭eureka的服务_SpringCloud微服务踩坑系列之二
  3. Facebook 最新力作 FBNetV3来了!相比 ResNeSt 提速 5 倍,精度不输 EfficientNet
  4. HDU4607(求树中的最长链)
  5. java的vector_java中的Vector类
  6. 13篇顶会!25岁成985高校博导,入职半年发ICML,网友:万点暴击
  7. 杰出人士的34个好习惯
  8. java拆分日期_Java根据控制台输入的特定日期格式拆分日期
  9. Java开源大全 网站
  10. 科技论文阅读-论文写作-citavi-Latex-word-Grammarly-1checker 小笔记
  11. 微信记账小程序(附源码),你值得拥有!
  12. 分享几个边玩儿边学的游戏App,学习从未如此轻松有趣
  13. python excel怎么将字母后的数字取出来_利用通配符将Excel中英文字母、中文、数字提取出来...
  14. 哪些人不适合吃枸杞?
  15. 非侵入性脑刺激和太空探索
  16. NLP领域论文笔记【研一下研二上】01
  17. js判断ie和edge是否安装Adobe Reader PDF阅读器
  18. 高德地图定位传值经纬度坐标为null,null
  19. Java进阶(十一)缓冲流
  20. ROS routerOS 软路由

热门文章

  1. JS基础 Set 用于存储任何类型的唯一值
  2. 参考文献怎么找?3分钟找到1000篇论文参考文献!
  3. 跨模态行人重识别:Deep Learning for Person Re-identification:A Survey and Outlook(行人重识别综述)
  4. python if函数两个并列条件怎么用,Python 并列和或者条件的使用说明
  5. 无法启动此程序因为计算机丢失zlib.dll,zlib1.dll怎么修复?zlib1.dll丢失解决方法及注意事项...
  6. unet预测图片全黑/全灰解决方案(keras)
  7. 微信小程序-仿朋友圈点赞评论操作面板
  8. 蓝桥杯少儿编程2020年8月份C++比赛每日一练
  9. java中如何将26个字母依次输出_Java用for循环依次打印26个英文字母,每行十个字母的代码怎么打?...
  10. listview qt 选中内容_演练: 操作Qt应用中的QListView