接前文 分布式存储-HDFS 架构解析,我们总体分析了 HDFS 架构的主要构成组件包括:NameNode.DataNode 和 Client.本文首先进一步解析 HDFS NameNode 的设计和实现要点. 元数据持久化 NameNode 将所有元信息以特定的数据结构组织存放在内存中,对于 namespace 和 replication factor 的信息会进行持久化,而映射关系则不会持久化.因为映射关系是通过 DataNode 启动后定时汇报上来,即使 NameNode 重启后内存信息丢…
接前文 分布式存储-HDFS 架构解析,我们总体分析了 HDFS 架构的主要构成组件包括:NameNode.DataNode 和 Client.本文首先进一步解析 HDFS NameNode 的设计和实现要点. 元数据持久化 NameNode 将所有元信息以特定的数据结构组织存放在内存中,对于 namespace 和 replication factor 的信息会进行持久化,而映射关系则不会持久化.因为映射关系是通过 DataNode 启动后定时汇报上来,即使 NameNode 重启后内存信息丢…
「后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点. 我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现的. 然后呢,我就去把 GFS 的原始论文找出来仔细看了遍,GFS 的整体架构图如下: HDFS 参照了它所以大部分架构设计概念是类似的,比如 HDFS NameNode 相当于 GFS Master,HDFS DataNode 相当于 GFS chunkserver. 但还有些细节不同的地方,所以…
在前面的文章 <HDFS DataNode 设计实现解析>中我们对文件操作进行了描述,但并未展开讲述其中涉及的异常错误处理与恢复机制.本文将深入探讨 HDFS 文件操作涉及的错误处理与恢复过程. 读异常与恢复 读文件可能发生的异常有两种: 读取过程中 DataNode 挂了 读取到的文件数据损坏 HDFS 的文件块多副本分散存储机制保障了数据存储的可靠性,对于第一种情况 DataNode 挂了只需要失败转移到其他副本所在的 DataNode 继续读取,而对于第二种情况读取到的文件数据块若校验失…
前文分析了 NameNode,本文进一步解析 DataNode 的设计和实现要点. 文件存储 DataNode 正如其名是负责存储文件数据的节点.HDFS 中文件的存储方式是将文件按块(block)切分,默认一个 block 64MB(该大小可配置).若文件大小超过一个 block 的容量可能会被切分为多个 block,并存储在不同的 DataNode 上.若文件大小小于一个 block 的容量,则文件只有一个 block,实际占用的存储空间为文件大小容量加上一点额外的校验数据.也可以这么说一个…
前面对 HDFS NameNode 和 DataNode 的架构设计实现要点做了介绍,本文对 HDFS 最后一个主要构成组件 Client 做进一步解析. 流式读取 HDFS Client 为客户端应用提供一种流式读取模型,就像访问本机文件系统一样来访问 HDFS.将复杂的分布式文件系统读取细节隐藏,简化了上层应用的使用难度.写过读取本机文件的程序员想必都很熟悉流式读取的编程模型,就不多说了. 错误处理 相比读取本机文件系统,从分布式文件系统读取出错概率会更高.因此 HDFS Client 提供…
本文以 Hadoop 提供的分布式文件系统(HDFS)为例来进一步展开解析分布式存储服务架构设计的要点. 架构目标 任何一种软件框架或服务都是为了解决特定问题而产生的.还记得我们在 <分布式存储 - 概述>一文中描述的几个关注方面么?分布式文件系统属于分布式存储中的一种面向文件的数据模型,它需要解决单机文件系统面临的容量扩展和容错问题. 所以 HDFS 的架构设计目标就呼之欲出了: 面向超大文件或大量的文件数据集 自动检测局部的硬件错误并快速恢复 基于此目标,考虑应用场景出于简化设计和实现的目…
好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适.最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类.结合实际工作中碰到的问题,以寻找答案的方式来剖解技术,很多时候我们都不是在创造新技术,而是在应用技术.为了更有效率与效果的用好技术,我们需要了解一些技术的原理与工作方式.带着问题从使用者的角度去剖析技术原理,并将开源技术产品和框架作为一类技术的参考实现来讲解.以讲清原理为主要目的,对于具体实现的技术细节若无特别之处则尽可能点到即止. 事务与复制…
前文分析了 NameNode,本文进一步解析 DataNode 的设计和实现要点. 文件存储 DataNode 正如其名是负责存储文件数据的节点.HDFS 中文件的存储方式是将文件按块(block)切分,默认一个 block 64MB(该大小可配置).若文件大小超过一个 block 的容量可能会被切分为多个 block,并存储在不同的 DataNode 上.若文件大小小于一个 block 的容量,则文件只有一个 block,实际占用的存储空间为文件大小容量加上一点额外的校验数据.也可以这么说一个…
前面对 HDFS NameNode 和 DataNode 的架构设计实现要点做了介绍,本文对 HDFS 最后一个主要构成组件 Client 做进一步解析. 流式读取 HDFS Client 为客户端应用提供一种流式读取模型,就像访问本机文件系统一样来访问 HDFS.将复杂的分布式文件系统读取细节隐藏,简化了上层应用的使用难度.写过读取本机文件的程序员想必都很熟悉流式读取的编程模型,就不多说了. 错误处理 相比读取本机文件系统,从分布式文件系统读取出错概率会更高.因此 HDFS Client 提供…