后端分布式系列:分布式存储-HDFS Client 设计实现解析
前面对 HDFS NameNode 和 DataNode 的架构设计实现要点做了介绍,本文对 HDFS 最后一个主要构成组件 Client 做进一步解析。
流式读取
HDFS Client 为客户端应用提供一种流式读取模型,就像访问本机文件系统一样来访问 HDFS。将复杂的分布式文件系统读取细节隐藏,简化了上层应用的使用难度。写过读取本机文件的程序员想必都很熟悉流式读取的编程模型,就不多说了。
错误处理
相比读取本机文件系统,从分布式文件系统读取出错概率会更高。因此 HDFS Client 提供了一些附加功能来提升分布式文件系统读取访问的可用性。在从某个 DataNode 读取数据的过程中若发生错误异常,Client 会透明的转移到距离第二接近的 DataNode 上,并记住第一个 DataNode 读取失败,后续的 blocks 读取将不再尝试该 DataNode。除此之外 Client 对于读到的每个 block 进行 checksum 校验,若读到损坏的 block,则向 NameNode 汇报,并尝试从其他副本重新读取。
缓冲写入
创建文件并写入数据的操作并不是直接连到 DataNode 同步远程写入的,而是通过写入本地的一个临时文件来作缓冲。我们写本地文件也经常使用一种 BufferedWriter 来提高写入吞吐能力。本质上都是为了解决数据生产端和数据接收端处理能力的差异,在单机情况下磁盘操作慢,所以用内存 buffer 来缓冲。在分布式环境下,不仅要考虑磁盘还要考虑网络,所以用本地内存加上本地磁盘文件来做缓冲。
应用写 HDFS 的操作被透明的转移到写入本地文件,当本地文件积累的数据超过一个 block 的大小后,Client 才请求 NameNode 分配 DataNodes,Client 再将本地文件的数据一次性的发送到对应的 DataNodes 流水线处理。这实际是将同步写转变成了异步写过程,提高了写入吞吐性能。
当文件被关闭后,在 Client 端临时文件中剩下的数据将被传输给 DataNode。然后 Client 告知 NameNode 文件已关闭,写入完成。NameNode 此时才将新写入的文件持久化,若在文件关闭前 NameNode 宕机,则正在写入的文件算作丢失了。
总结
Client 在 HDFS 的三个主要部件中相对简单,在设计实现时更多考虑易用性、容错和性能。
至此,对 HDFS 的三个主要部件 NameNode、DataNode 和 Client 的设计实现要点进行了讲述,
后续会以主题文章对其中一些关键的技术点做进一步剖析。
参考
[1] Hadoop Documentation. HDFS Architecture.
[2] Robert Chansler, Hairong Kuang, Sanjay Radia, Konstantin Shvachko, and Suresh Srinivas. The Hadoop Distributed File System
[3] Tom White. Hadoop: The Definitive Guide. O’Reilly Media(2012-05), pp 94-96
下面是我自己开的一个微信公众号 [瞬息之间],除了写技术的文章、还有产品的、行业和人生的思考,希望能和更多走在这条路上同行者交流,有兴趣可关注一下,谢谢。
后端分布式系列:分布式存储-HDFS Client 设计实现解析的更多相关文章
- HDFS Client 设计实现解析
前面对 HDFS NameNode 和 DataNode 的架构设计实现要点做了介绍,本文对 HDFS 最后一个主要构成组件 Client 做进一步解析. 流式读取 HDFS Client 为客户端应 ...
- 后端分布式系列:分布式存储-HDFS 与 GFS 的设计差异
「后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点. 我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现 ...
- 后端分布式系列:分布式存储-HDFS 异常处理与恢复
在前面的文章 <HDFS DataNode 设计实现解析>中我们对文件操作进行了描述,但并未展开讲述其中涉及的异常错误处理与恢复机制.本文将深入探讨 HDFS 文件操作涉及的错误处理与恢复 ...
- 后端分布式系列:分布式存储-HDFS DataNode 设计实现解析
前文分析了 NameNode,本文进一步解析 DataNode 的设计和实现要点. 文件存储 DataNode 正如其名是负责存储文件数据的节点.HDFS 中文件的存储方式是将文件按块(block)切 ...
- 后端分布式系列:分布式存储-HDFS NameNode 设计实现解析
接前文 分布式存储-HDFS 架构解析,我们总体分析了 HDFS 架构的主要构成组件包括:NameNode.DataNode 和 Client.本文首先进一步解析 HDFS NameNode 的设计和 ...
- 后端分布式系列:分布式存储-HDFS 架构解析
本文以 Hadoop 提供的分布式文件系统(HDFS)为例来进一步展开解析分布式存储服务架构设计的要点. 架构目标 任何一种软件框架或服务都是为了解决特定问题而产生的.还记得我们在 <分布式存储 ...
- 后端分布式系列:分布式存储-MySQL 数据库事务与复制
好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适.最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类.结合实际工作中碰到的问题,以寻找答案的方式来剖 ...
- Hadoop分布式文件系统(HDFS)设计
Hadoop分布式文件系统是设计初衷是可靠的存储大数据集,并且使应用程序高带宽的流式处理存储的大数据集.在一个成千个server的大集群中,每个server不仅要管理存储的这些数据,而且可以执行应用程 ...
- HDFS DataNode 设计实现解析
前文分析了 NameNode,本文进一步解析 DataNode 的设计和实现要点. 文件存储 DataNode 正如其名是负责存储文件数据的节点.HDFS 中文件的存储方式是将文件按块(block)切 ...
随机推荐
- 【bzoj4571&&SCOI2016美味】
4571: [Scoi2016]美味 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 656 Solved: 350[Submit][Status][ ...
- SpringBoot多环境部署,在启动时动态设置相应的配置文件
项目中,往往在测试环境和正式环境拥有不同的配置,例如数据库连接,第三方库的appkey等.这时候,我们就要在不同的环境启用不同的配置 下面新建三个文件,分别表示开发环境,生产环境和测试环境的配置文件 ...
- 春招实习面经分享(已拿到腾讯春招Offer)
十分幸运地收到了腾讯的Offer..回来报答一下各位牛客网的战友们,说起来也是有点运气成分,最后通过腾讯的内推收到了offer!之前也屡遭重创,阿里的内推一面挂了(寒假过早地投简历,电话面试应对地不太 ...
- Linux学习之CentOS(十三)-----磁盘管理之 磁盘与目录的容量(转) df 与du 命令
磁盘与目录的容量 现在我们知道磁盘的整体数据是在 superblock 区块中,但是每个各别文件的容量则在 inode 当中记载的. 那在文字接口底下该如何叫出这几个数据呢?底下就让我们来谈一谈这两个 ...
- spring AOP的两种配置方式
连接点(JoinPoint) ,就是spring允许你是通知(Advice)的地方,那可就真多了,基本每个方法的前.后(两者都有也行),或抛出异常是时都可以是连接点,spring只支持方法连接点.其他 ...
- Unrecognized token 'XXXX': was expecting ('true', 'false' or 'null')
原因是,返回或发送数据格式不规范. 当dataType指定为json后,1.4+以上的jquery版本对json格式要求更加严格.如果不是严格的json格式,就不能正常执行success回调函数. J ...
- SVN冲突解决
问题一.执行SVN commit时候,会生成除正常文件之外.mine..r3439 ..r3368的三个文件 .mine:是自己要提交的版本 .r3439:在别人之前提交的版本 .r3368:初始版本 ...
- Java 的异常处理机制
异常是日常开发中大家都「敬而远之」的一个东西,但实际上几乎每种高级程序设计语言都有自己的异常处理机制,因为无论你是多么厉害的程序员,都不可避免的出错,换句话说:你再牛逼,你也有写出 Bug 的时候. ...
- VueJs(3)---V-指令
VueJs(3)---V-指令(1) 一.语法 v- 指令是带有v-的特殊属性 v-if 条件渲染 v-show v-else (必须在v-if/v-else-if/v-show指令后) v-else ...
- win8以上系统查看iis网站进程内存占用情况
由于win8以上系统在任务管理器中已经屏蔽了具体的IIS网站的进程,在进程以及详细中无法区分是哪个站点了,所以我们需要先知道各站点对应的进程pid,然后再到任务管理器中根据具体的pid查看资源占用情况 ...