前面对 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


下面是我自己开的一个微信公众号 [瞬息之间],除了写技术的文章、还有产品的、行业和人生的思考,希望能和更多走在这条路上同行者交流,有兴趣可关注一下,谢谢。

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/mindwind/p/4833099.html

HDFS Client 设计实现解析相关推荐

  1. HDFS DataNode 设计实现解析

    前文分析了 NameNode,本文进一步解析 DataNode 的设计和实现要点. 文件存储 DataNode 正如其名是负责存储文件数据的节点.HDFS 中文件的存储方式是将文件按块(block)切 ...

  2. Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理

    <Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理> 基本信息 作者: 蔡斌 陈湘萍 出版社:机械工业出版社 ISBN:9787111417668 上架 ...

  3. Netty协议设计与解析

    Netty协议设计与解析 1. 为什么需要协议? TCP/IP 中消息传输基于流的方式,没有边界. 协议的目的就是划定消息的边界,制定通信双方要共同遵守的通信规则 例如:在网络上传输 下雨天留客天留我 ...

  4. Netty 基础-协议设计与解析

    6. 协议设计与解析 6.1 为什么需要协议? TCP/IP 中消息传输基于流的方式,没有边界. 协议的目的就是划定消息的边界,制定通信双方要共同遵守的通信规则 例如:在网络上传输 下雨天留客天留我不 ...

  5. Hadoop核心之HDFS 架构设计

    概述:HDFS即Hadoop Distributed File System分布式文件系统,它的设计目标是把超大数据集存储到分布在网络中的多台普通商用计算机上,并且能够提供高可靠性和高吞吐量的服务.分 ...

  6. 《Cinema 4D + After Effects动态图形设计案例解析》——1.2 动态图形的历史和发展...

    本节书摘来自异步社区<Cinema 4D + After Effects动态图形设计案例解析>一书中的第1章,第1.2节,作者 Klet,更多章节内容可以访问云栖社区"异步社区& ...

  7. 《Cinema 4D + After Effects动态图形设计案例解析》——第 1 章 动态图形设计概述 1.1 什么是动态图形...

    本节书摘来自异步社区<Cinema 4D + After Effects动态图形设计案例解析>一书中的第1章,第1.1节,作者 Klet,更多章节内容可以访问云栖社区"异步社区& ...

  8. 《Cinema 4D + After Effects动态图形设计案例解析》——1.3 动态图形的应用领域

    本节书摘来自异步社区<Cinema 4D + After Effects动态图形设计案例解析>一书中的第1章,第1.3节,作者 Klet,更多章节内容可以访问云栖社区"异步社区& ...

  9. 《Cinema 4D + After Effects动态图形设计案例解析》——1.5 软件的历史

    本节书摘来自异步社区<Cinema 4D + After Effects动态图形设计案例解析>一书中的第1章,第1.5节,作者 Klet,更多章节内容可以访问云栖社区"异步社区& ...

最新文章

  1. Xcode5下使用纯代码构建简单的HelloWorld程序
  2. oracle不能单步调试,oracle bug之vipca无法执行问题的解决
  3. 手机两列布局,正方形
  4. python 判断每月最后一天_python获取某年中每个月的第一天和最后一天的两种方法...
  5. 甘肃省计算机能力vf考试题库,计算机等级考试二级VF模拟试题十及答案解析
  6. java数组实验心得体会_学习JAVA之数组小结
  7. SpringBoot整合kafka案例
  8. AtCoder Grand Contest 010 D - Decrementing
  9. linux配置命令route,linux路由配置命令route学习
  10. 杰奇python采集器_linux下安装杰奇,实现关关采集器远程采集详细教程
  11. 你眼里的废品也许就是别人眼里的宝贝(生意)
  12. 领域驱动设计系列关键概念
  13. 南邮 | 计算机图形学大作业:Skybox + Shadow volume
  14. js 里奇数的判断条件
  15. java license机制dll_(转)使用truelicense实现用于JAVA工程license机制(包括license生成和验证)...
  16. 玻色量子CEO文凯受邀出席首经贸金融学院系列讲座
  17. 2. web前端开发分享-css,js进阶篇
  18. SpringBoot开源项目案例
  19. JMeter基础系列:接口响应时间
  20. 地图缓存和动态地图服务

热门文章

  1. Redis 主从复制的几种方法
  2. 汇编语言:编写代码实现字符串的复制
  3. YAML_11 when条件判断
  4. web前端开发---弃Hbuilder编辑器到Atom插件推荐,快捷键,快速编辑html 使用
  5. 12个JavaScript技巧
  6. 网络采集库NCrawler
  7. 12款堪称神器的 Chrome 插件,Max 你的工作效率!
  8. php类中引函数变量,一个非线性差分方程的隐函数解
  9. php版本个版本区别,PHP版本不一样有什么区别
  10. opencv 膨胀_【3】OpenCV图像处理模块(5)更多的形态学变换(开、闭、形态梯度、顶帽、黑帽)...