前面对 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 设计实现解析的更多相关文章

  1. 后端分布式系列:分布式存储-HDFS Client 设计实现解析

    前面对 HDFS NameNode 和 DataNode 的架构设计实现要点做了介绍,本文对 HDFS 最后一个主要构成组件 Client 做进一步解析. 流式读取 HDFS Client 为客户端应 ...

  2. HDFS DataNode 设计实现解析

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

  3. HDFS NameNode 设计实现解析

    接前文 分布式存储-HDFS 架构解析,我们总体分析了 HDFS 架构的主要构成组件包括:NameNode.DataNode 和 Client.本文首先进一步解析 HDFS NameNode 的设计和 ...

  4. 后端分布式系列:分布式存储-HDFS DataNode 设计实现解析

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

  5. 后端分布式系列:分布式存储-HDFS NameNode 设计实现解析

    接前文 分布式存储-HDFS 架构解析,我们总体分析了 HDFS 架构的主要构成组件包括:NameNode.DataNode 和 Client.本文首先进一步解析 HDFS NameNode 的设计和 ...

  6. 2本Hadoop技术内幕电子书百度网盘下载:深入理解MapReduce架构设计与实现原理、深入解析Hadoop Common和HDFS架构设计与实现原理

    这是我收集的两本关于Hadoop的书,高清PDF版,在此和大家分享: 1.<Hadoop技术内幕:深入理解MapReduce架构设计与实现原理>董西成 著  机械工业出版社2013年5月出 ...

  7. Hadoop分布式文件系统(HDFS)设计

    Hadoop分布式文件系统是设计初衷是可靠的存储大数据集,并且使应用程序高带宽的流式处理存储的大数据集.在一个成千个server的大集群中,每个server不仅要管理存储的这些数据,而且可以执行应用程 ...

  8. HDFS源码分析四-HDFS Client

    4. HDFS Client ( 未完待续 ) 目录: 4.1 认识 DFSClient ( 未完待续 ) 4.2 输入流 ( 未完待续 ) 4.3 输出流 ( 未完待续 ) 4.4 Distribu ...

  9. hdfs client access the hdfs cluster not in one domain

    https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsMultihoming.html#Clients_u ...

随机推荐

  1. 小白请教几个关于Java虚拟机内存分配策略的问题

    最近在看周志明所著的<深入理解Java虚拟机>,有几个问题不太明白,希望对虚拟机有研究的哥们儿帮我解答一下.先说一下我进行试验的环境: 操作系统:Mac OS X 10.11.6 EI C ...

  2. Entity Framework 6 Database-first连接Oracle11g

    Entity Framework 6 Database-first连接Oracle11g(图文细说) 本文发布地址:http://www.cnblogs.com/likeli/p/5577264.ht ...

  3. JQuery的无缝滚动

    图片无缝向左滚动的代码如下:   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  4. 【刷题笔记】--lintcode木头加工(java)

    木头加工 题目描述 有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k.当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度. 注意事项 木头 ...

  5. mac homebrew的用法

    与 MacPorts 类似,OS X 下还有款包管理工具为 Homebrew,安装方法也很简单. ruby -e "$(curl -fsSL https://raw.github.com/H ...

  6. php sprintf 函数的用法

    sprintf() 函数把格式化的字符串写入变量中. arg1.arg2.++ 参数将被插入到主字符串中的百分号(%)符号处.该函数是逐步执行的.在第一个 % 符号处,插入 arg1,在第二个 % 符 ...

  7. 修改radio与check样式

    一般的radio与check的样式很难看,这个时候就需要我们自己修改其样式 逻辑思维: 1.用label包裹input标签以及样式标签,然后将radio定位到界面以外,设置样式标签的样式 2.使用伪类 ...

  8. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  9. [NOIP2014]寻找道路 题解

    题目大意: 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足 ...

  10. Linux 时间时区同步

    $ sudo cp /usr/share/zoneinfo/Asia/ShangHai /etc/localtime 上述是修改系统时区 同步时间 1.  安装ntpdate工具 $ sudo apt ...