HDFS原理与应用 | 青训营笔记

147 阅读3分钟

这是我参与「第四届青训营」笔记创作活动的第8天。

HDFS基本介绍

HDFS(Hadoop Distributed File System):分布式文件系统,作为Hadoop的基础存储系统,是一种分布式,高容错,可线性扩展的文件系统。

Hadoop技术体系

image.png

  • 存储层: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 写与读流程

image.png

image.pngnamenode

  • 维护目录树:维护目录树的增删查改,保证所有修改都能持久化;
  • 维护文件和数据块的关系:文件被切分成多个块,文件以数据块为单位多副本存放;
  • 维护文件块存放节点信息:通过接受datanode的心跳汇报信息,维护集群节点的拓扑结构和每个文件块所有副本所在的DataNode类表;
  • 分配新文件存放节点:Client创建新文件时,需要有NameNode来确定分配目标DataNode

datanode

  • 数据块存储:高效实现数据块在硬盘上的存取。
  • 心跳汇报:将本机上的数据块列表发送给NameNode,让其维护数据。
  • 副本复制:数据写入时pipeline IO操作,机器故障时补全副本。## 关键设计

分布式存储系统的基本概念

  • 容错能力:能处理大部分异常场景
  • 一致性模型:为实现容错,数据必须为多副本。需保证多副本内容一致
  • 可扩展性:具备横向扩张的能力
  • 节点体系模式:主从、对等模式。必须高可用。
  • 数据放置策略:系统由多个节点组成,数据多副本存放,考虑数据存放的策略。
  • 单机存储引擎:落盘持久化,如何高效得存取硬盘数据。

namenode目录树维护
fsimage仅在内存中修改,EditLog需要立即保存到硬盘

image.png

NameNode数据放置 image.png

控制面建设:保障系统稳定运行

  • HouseKeeping组件:比如Balancer,Mover等
  • 可观测性设施:比如系统指标监控设施等,帮助快速发现定位问题。
  • 运维体系建设:从最基本的命令行手工操作,脚本自动化再到完善的运维平台。

总结

HDFS是Hadoop的基础存储系统,是一种最经典的分布式文件系统。本节课对HDFS的特点、架构、关键设计和应用多个方面进行讲解,为我们打下了牢固的基础。此外,基于本节课内容,还可进一步探讨不同的分布式存储系统的异同。了解实际运行过程中,HDFS可能出现的异常场景。