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

125 阅读4分钟

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

1. HDFS基本介绍

2. 架构原理

3. 关键设计

4. 应用场景

 

 

1. HDFS基本介绍

Hadoop Distributed File System

分布式文件系统。大容量、高可靠,分布式、容错、高可用、高吞吐、可扩展、廉价。

 

 

 

2. 架构原理

2.1 HDFS组件

HDFS基本介绍.png

NameNode在逻辑上更中心一些。

 

2.2 Client写流程

client写.png

Client向namenode请求写入,namenode返回可写入数据的地址。

写入通过pipeline的方式写。

 

2.3 client读流程

client读.png

 

2.4 元数据节点NameNode

-维护目录树

维护目录树的增删改查操作,保证所有修改都能持久化,以便机器掉电不会造成数据丢失或不一致。

-维护文件和数据块的关系

文件被切分成多个块,文件以数据块为单位进行多副本存放。

-维护文件块存放节点信息

通过接收DataNode的心跳汇报信息,维护集群节点的拓扑结构和每个文件块所有副本所在的DataNode类表。

-分配新文件存放节点

Client创建新文件时,需要NameNode来分配目标DataNode。

 

2.5 数据节点DataNode

-数据块存取

DataNode需要高效实现对数据块在硬盘上的存取

-心跳汇报

把存放在本机的数据列表发送给NameNode,以便NameNode能维护数据块的位置信息,同时让NameNode确定该节点处于正常存活状态

-副本复制

1.数据写入时pipeline IO操作

2.机器故障时补全副本

3. 关键设计

3. 关键设计

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

-容错能力

处理大部分异常场景,如:服务器宕机、网络异常、磁盘故障、网络超时。

-一致性模型

为了实现容错,数据必须多副本存放,一致性就是保证多副本的内容一致。

-可扩展性

分布式存储系统需要具备横向扩张scale-out的能力。(加节点)

-节点体系

常见:主从模式(站多)、对等模式等,都需要保证高可用。

-数据放置

多节点、多副本存放时,需要考虑存放策略。

-单机存储引擎

数据要落盘持久化,单机引擎需要解决的是根据系统特点保证高效地存取硬盘。

 

3.2 NameNode目录树维护

Fsimage

-文件系统目录树

-完整存放在内存中

-定时存放到硬盘

-修改室只会修改内存中的目录树

 

Editlog

-目录树的修改日志(实时记录到硬盘上,防止吊链之类的错误)

-client更新目录树需要持久化Editlog后才能表示更新成功

-Editlog可存放在本地文件系统,也可存放在专业系统上

-NameNode HA方案一个关键点就是如何实现Editlog共享

 

3.3 NameNode数据放置

NameNode做副本的时候不用整个文件,而是分块。

 

数据块信息维护

-目录树保存每个文件的块id

-NameNode维护了每个数据块所在的节点信息

-NameNode根据DataNode汇报的信息动态维护位置信息

-NameNode不会持久化数据块位置信息

 

数据放置策略

-新数据存放到哪写节点

-数据均衡需要怎么合理搬迁数据(尽可能均衡)

-3个副本怎么合理放置(尽可能均衡)

Browsing HDFS

 

3.4 DataNode

数据块的硬盘存放

-文件在NameNode已分割成块

-DataNode以block为单位对数据进行存取

 

启动扫盘

-DataNode需要知道本机存放了那些数据块

-启动时把本机硬盘上的数据块列表加载在内存中

 

3.5 HDFS写异常处理

3.5.1 Lease Recovery

租约:client要修改一个文件时,需要通过NameNode上锁,这个锁就是租约(Lease)

情景:文件写了一半,client自己挂掉了。

可能产生的问题:副本不一致、Lease无法释放。

解决方法:lease recovery

 

3.5.2 Pipeline Recovery

情景:文件写入过程中(创建连接时、数据传输时、complete阶段),DataNode侧出现异常挂掉了。

解决方法:Ppipeline Recovery

 

3.6 Client读异常处理

情景:读文件时,DataNode侧出现异常

解决方法:节点Failover

 

3.7 旁路系统

异步地解决累积的问题,减少复杂性。

Balancer:均衡DataNode的容量

Mover:确保副本放置符合策略要求

 

3.8 控制面建设

可观测性设施

-指标埋点 -数据采集 -访问日志 -数据分析

 

运维体系建设

-运维操作需要平台化

-NameNode操作复杂

-DataNode机器规模庞大

-组件控制面API