后端分布式系列:分布式存储-HDFS 架构解析

原创 2015年08月21日 21:24:45

本文以 Hadoop 提供的分布式文件系统(HDFS)为例来进一步展开解析分布式存储服务架构设计的要点。

架构目标

任何一种软件框架或服务都是为了解决特定问题而产生的。还记得我们在 《分布式存储 - 概述》一文中描述的几个关注方面么?分布式文件系统属于分布式存储中的一种面向文件的数据模型,它需要解决单机文件系统面临的容量扩展和容错问题。

所以 HDFS 的架构设计目标就呼之欲出了:

  1. 面向超大文件或大量的文件数据集
  2. 自动检测局部的硬件错误并快速恢复

基于此目标,考虑应用场景出于简化设计和实现的目的,HDFS 假设了一种 write-once-read-many 的文件访问模型。这种一次写入并被大量读出的模型在现实中确实适应很多业务场景,架构设计的此类假设是合理的。正因为此类假设的存在,也限定了它的应用场景。

架构总揽

下面是一张来自官方文档的架构图:
这里写图片描述

从图中可见 HDFS 的架构包括三个部分,每个部分有各自清晰的职责划分。

  1. NameNode
  2. DataNode
  3. Client

从图中可见,HDFS 采用的是中心总控式架构,NameNode 就是集群的中心节点。

NameNode

NameNode 的主要职责是管理整个文件系统的元信息(Metadata),元信息主要包括:

  • File system namesapce
    HDFS 类似单机文件系统以目录树的形式组织文件,称为 file system namespace
  • Replication factor
    文件副本数,针对每个文件设置
  • Mapping of blocks to DataNodes
    文件块到数据节点的映射关系

在上面架构图中,指向 NameNode 的 Metadata ops 主要就是针对文件的创建、删除、读取和设置文件的副本数等操作,所以所有的文件操作都绕不过 NameNode。除此之外 NameNode 还负责管理 DataNode,如新的 DataNode 加入集群,旧的 DataNode 退出集群,在 DataNode 之间负载均衡文件数据块的分布等等。更多关于 NameNode 的设计实现分析,后面会单独成文详解。

DataNode

DataNode 的职责如下:

  • 存储文件块(block)
  • 服务响应 Client 的文件读写请求
  • 执行文件块的创建、删除和复制

从架构图上看到有个 Block ops 的操作箭头从 NameNode 指向 DataNode,会让人误以为 NameNode 会主动向 DataNode 发出指令调用。实际上 NameNode 从不调用 DataNode,仅仅是通过 DataNode 定期向 NameNode 发送心跳来携带回传的指令信息。

架构图上专门标记了 Rack1 和 Rack2,表明了 HDFS 在考虑文件数据块的多副本分布时针对机架感知作了专门设计,细节我们这里先不展开,更多关于 DataNode 的设计实现分析,后面会单独成文详解。

Client

考虑到 HDFS 交互过程的复杂性,所以特地提供了针特定编程语言的 Client 以简化使用。Client 的职责如下:

  • 提供面向应用编程语言的一致 API,简化应用编程
  • 改善访问性能

Client 之所以能够改善性能是因为针对读可以提供缓存(cache),针对写可以通过缓冲(buffer)批量方式,细节我们这里也先不展开,更多关于 Client 的设计实现分析,后面会单独成文详解。

总结

本来想在一篇文章里写完 HDFS 架构解析的,写着写着发现不太可能。作为分布式系统中最复杂的分布式存储类系统,每一个架构设计权衡的实现细节点,都值得好好推敲,一旦展开此文感觉就会长的没完没了,所以这里先总体过一下,针对每个部分的设计实现细节再以主题文章来详细解析。

参考

[1]Hadoop Documentation. HDFS Architecture.
[2]Robert Chansler, Hairong Kuang, Sanjay Radia, Konstantin Shvachko, and Suresh Srinivas. The Hadoop Distributed File System


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

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

HDFS分布式存储框架

HDFS实现了大数据的分布式存储,在HDFS集群中主要包括namenode节点和datanode节点。 namenode节点 namenode节点负责管理元数据信息以及响应客户端的请求(上传、下载.....
  • everl_1
  • everl_1
  • 2016年09月03日 15:51
  • 386

HDFS分布式存储及特点

介绍   HDFS是Hadoop应用程序使用的主要分布式存储,主要被设计在商用硬件上运行,也就是说,他必须满足低成本、高容错、高吞吐的特性才能在众多的分布式存储系统中脱颖而出。 特点 低成...
  • prettyEva
  • prettyEva
  • 2017年03月03日 20:09
  • 678

(一)分布式存储综述

这篇博客主要来总结一下分布式存储系统的历史,发展以及特性,从而对分布式存储系统有一个大概的了解,主要从一下几个部分来介绍分布式存储:分布式存储概念 分布式文件系统的发展 分布式存储系统的分类 分布式存...
  • hxl_1993
  • hxl_1993
  • 2017年03月17日 20:30
  • 1882

分布式存储概述

分布式存储是相对于单机存储而言,之所以要分布自然是因为互联网时代信息数据大爆炸,单机已经难以满足大型应用的数据存储需求。存储系统的关注点关于存储系统,一般我们关注下面几个方面: 数据分布与负载均衡...
  • mindfloating
  • mindfloating
  • 2015年12月22日 20:44
  • 5644

常见开源分布式存储系统

系统整体对比 对比说明 /文件系统 TFS FastDFS MogileFS MooseFS GlusterFS Cep...
  • wujin8589
  • wujin8589
  • 2017年04月20日 19:49
  • 3015

几种分布式存储系统的分析

分布式文件系统设计主要关注几个方面:设计特点、分布式能力、性能、容灾、维护和扩展、成本 分布式文件系统主要关键技术:全局名字空间、缓存一致性、安全性、可用性、可扩展性 其他关键技术:文件系统的快照和备...
  • stanjiang2010
  • stanjiang2010
  • 2010年12月31日 00:02
  • 22557

块存储、文件存储、对象存储这三者和分布式文件存储系统的本质区别

块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based St...
  • English0523
  • English0523
  • 2016年05月18日 16:33
  • 23201

分布式存储系统的分类

分布式存储系统面临的需求比较复杂,大致可以分为三类: 非结构化数据:包括所有格式的办公文档、文本、图片、图像、音频、视频信息等。 结构化数据:一般会存储在关系型数据库中,可用二位关系的表结构来对数据进...
  • github_20066005
  • github_20066005
  • 2017年02月26日 14:45
  • 1405

《大规模分布式存储系统:原理解析与架构实战》读书笔记(1)

第一章 概述 1.1 分布式存储的概念:      分布式存储系统是大量普通 PC 服务器通过 Internet 互联,对外作为一个整体提供存储服务。      分布式存储系统有如下特征:可扩展...
  • u013397636
  • u013397636
  • 2016年04月17日 00:18
  • 6267

分布式存储系统设计的若干原则

分布式存储系统设计中很多指标是不可得兼的,必须根据需求有所取舍。CAP理论、最终一致性、BASE理论、I/O五分钟法则、Amdahl定律和Gustafson定律、摩尔定律等,就是分布式存储系统设计的的...
  • liuben
  • liuben
  • 2011年02月20日 16:06
  • 35803
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:后端分布式系列:分布式存储-HDFS 架构解析
举报原因:
原因补充:

(最多只允许输入30个字)