这是我参与「第四届青训营」笔记创作活动的第8天。
HDFS基本介绍
HDFS(Hadoop Distributed File System):分布式文件系统,作为Hadoop的基础存储系统,是一种分布式,高容错,可线性扩展的文件系统。
Hadoop技术体系
- 存储层:HDFS
- 调度层:YARN
- 计算框架:MapReduce。
Spark在当前业界的使用已经远超于MapReduce,尽管它不属于Hadoop项目,但是和Hadoop也有紧密关系。
文件系统
单机文件系统非常普遍,从Windows NTFS到Linux的Ext4等,分布式文件系统是单机文件的延伸,概念术语是相通的,比如目录、文件、目录树等。
- 单机文件系统:常见的如Windows NTFS,Linux的Ext4,虽然不同的操作系统和实现,但是本质都是一样的,解决相同的问题。
- 分布式文件系统:本质上扩展、延伸了单机文件系统,提供了大容量、高可靠、低成本等功能特性;实现上一般也更为复杂。
分布式存储系统
针对不同的使用场景提供高效合理的系统。
- 对象存储:例如AWS的S3,阿里云的OSS,开源的Minio。
- 块存储:例如AWS的EBS,开源社区也有Ceph等。
- 文件系统:HDFS、GlusterFS、CubeFS等
- 数据库:KV数据库比如Cassandra,关系型数据库如TiDB、OceanBase等
HDFS功能特性
- 分布式;
- 容错:自动处理,规避错误场景;
- 高可用:数据多副本实现高可用;
- 高吞吐:并发读写;
- 可扩展:支持联邦集群模式;
- 廉价:只需通用硬件。
架构原理
组件
- Client/SDK:读写操作的发起点,HDFS很多读写逻辑都是在SDK中实现的。
- NameNode:元数据节点,是HDFS的中枢节点,也是服务的入口。
- DataNode:数据节点,存放实际用户数据。\
client 写与读流程
namenode
- 维护目录树:维护目录树的增删查改,保证所有修改都能持久化;
- 维护文件和数据块的关系:文件被切分成多个块,文件以数据块为单位多副本存放;
- 维护文件块存放节点信息:通过接受datanode的心跳汇报信息,维护集群节点的拓扑结构和每个文件块所有副本所在的DataNode类表;
- 分配新文件存放节点:Client创建新文件时,需要有NameNode来确定分配目标DataNode
datanode
- 数据块存储:高效实现数据块在硬盘上的存取。
- 心跳汇报:将本机上的数据块列表发送给NameNode,让其维护数据。
- 副本复制:数据写入时pipeline IO操作,机器故障时补全副本。## 关键设计
分布式存储系统的基本概念
- 容错能力:能处理大部分异常场景
- 一致性模型:为实现容错,数据必须为多副本。需保证多副本内容一致
- 可扩展性:具备横向扩张的能力
- 节点体系模式:主从、对等模式。必须高可用。
- 数据放置策略:系统由多个节点组成,数据多副本存放,考虑数据存放的策略。
- 单机存储引擎:落盘持久化,如何高效得存取硬盘数据。
namenode目录树维护
fsimage仅在内存中修改,EditLog需要立即保存到硬盘
NameNode数据放置
控制面建设:保障系统稳定运行
- HouseKeeping组件:比如Balancer,Mover等
- 可观测性设施:比如系统指标监控设施等,帮助快速发现定位问题。
- 运维体系建设:从最基本的命令行手工操作,脚本自动化再到完善的运维平台。
总结
HDFS是Hadoop的基础存储系统,是一种最经典的分布式文件系统。本节课对HDFS的特点、架构、关键设计和应用多个方面进行讲解,为我们打下了牢固的基础。此外,基于本节课内容,还可进一步探讨不同的分布式存储系统的异同。了解实际运行过程中,HDFS可能出现的异常场景。