这是我参与「第四届青训营」笔记创作活动的第11天
1、 HDFS基本介绍
HDFS: Hadoop Distributed File System
1.1Windows单机文件系统
1.2 Linux单机文件系统
BTRFS, ZFS XFS, EXT4 Linux目前支持将近100种文件系统
1.3 分布式文件系统
大容量
更多的机器,更多的存储介质
高可靠
多个副本提高容错能力
低成本
不需要高端硬件来扩容
1.4分布式存储系统
1.5 HDFS功能特性
01.分布式
受GFS启发,用Java实现的开源系统,没有实现完整的POSIX文件系统语义
02.容错
自动处理、规避多种错误场景,例如常见的网络错误、机器宕机等。
03.高可用
一主多备模式实现元数据高可用,数据多副本实现用户数据的高可用
04.高吞吐
Client直接从DataNode读取用户数据,服务端支持海量client并发读写
05.可扩展
支持联邦集群模式,DataNode数 量可达10w级别
06.廉价
只需要通用硬件,不需要定制高端的昂贵硬件设备
2、 架构原理
2.1 HDFS组件
2.2 Client写流程
2.3 Client读流程
2.4 元数据节点NameNode
维护目录树
维护目录树的增删改查操作,保证所有修改都能持久化,以便机器掉电不会造成数据丢 失或不一致。
维护文件和数据块的关系
文件被切分成多个块,文件以数据块为单位进行多副本存放
维护文件块存放节点信息 通过接收DataNode的心跳汇报信息,维护集群节点的拓扑结构和每个文件块所有副本 所在的DataNode类表。
分配新文件存放节点 Client创建新的文件时候,需要有NameNode来确定分配目标DataNode
2.5 数据节点DataNode
数据块存取
DataNode需要高效实现对数据块在硬盘上的存取
心跳汇报
把存放在本机的数据块列表发送给NameNode,以便NameNode能维护数据块的位置信息,同时让NameNode确定该节点处于正常存活状态
副本复制
1.数据写入时Pipeline IO操作
2.机器故障时补全副本
3、 关键设计
分布式存储系统基本概念
-
容错能力
- 能够处理绝大部分异常场景,例如服务器宕常见的有主从模式、对等模式等,不管哪种 机、网络异常、磁盘故障、网络超时等
-
一致性模型
- 为了实现容错,数据必须多副本存放,一致性要解决的问题是如何保障这多个副本的内容都是一致的
-
可扩展性
- 分布式存储系统需要具备横向扩张scale-out的能力
-
节点体系
- 常见的有主从模式、对等模式等,不管哪种模式,高可用是必须的功能
-
数据放置
- 系统是由多个节点组成,数据是多个副本存放时,需要考虑数据存放的策略。
-
单机存储引擎
- 在绝大部分存储系统中,数据都是需要落盘持久化,单机引擎需要解决的是根据系统特 点,如何高效得存取硬盘数据。
3.1 NameNode目录树维护
➢fsimage
● 文件系统目录树
● 完整的存放在内存中
● 定时存放到硬盘上
● 修改是只会修改内存中的目录树
➢EditLog
● 目录树的修改日志
● client更新目录树需要持久化EditLog后才能表示更新成功
● EditLog可存放在本地文件系统,也可存放在专用系统上
● NameNode HA方案一个关键 点就是如何实现EditLog共享
3.2 NameNode数据放置
➢数据块信息维护
● 目录树保存每个文件的块id
● NameNode维护了每个数据块所在的节点信息
● NameNode根据DataNode汇报的信息动态维护位置信息
● NameNode不会持久化数据块位置信息
➢数据放置策略
● 新数据存放到哪写节点
● 数据均衡需要怎么合理搬迁数据
● 3个副本怎么合理放置
3.3 DataNode
➢数据块的硬盘存放
▪️ 文件在 NameNode 已分割成 block
▪️ DataNode 以 block 为单位对数据进行存取
➢启动扫盘
● DataNode需要知道本机存放了哪些数据块
● 启动时把本机硬盘上的数据块列表加载在内存中
3.4 HDFS写异常处理: Lease Recovery
➢租约:Client要修改一个文件时,需要通过NameNode上锁,这个锁就是租约(Lease)。
➢情景:文件写了一半,client自己挂掉了。
可能产生的问题:
1)副本不一-致
2)Lease无法释放
➢解决方法: Lease Recovery
3.4 HDFS写异常处理: Pipeline Recovery
➢情景: 文件写入过程中,DataNode 侧出现异常挂掉了。
➢异常出现的时机:
▪️ 创建连接时
▪️ 数据传输时
▪️ complete阶段
➢解决方法: Pipeline Recovery
3.5 Client读异常处理
➢情景:读取文件的过程,DataNode 侧出现异常挂掉了
➢解决方法: 节点Failover
➢增强情景: 节点半死不过,读取很慢
3.6旁路系统
Balancer:均衡DataNode的容量
Mover :确保副本放置符合策略要求
3.7控制面建设
-
可观测性设施
-
指标埋点
-
数据采集
-
访问日志
-
数据分析
-
-
运维体系建设
-
运维操作需要平台化
-
NameNode操作复杂
-
DataNode机器规模庞大
-
组件控制面API
-
4、 应用场景
4.1 使用HDFS的公司
4.2 初窥大数据生态
4.3 ETL: Extract,Transform,Load
4.4 OLAP查询引擎
4.5 HBase
4.6 机器学习
TensorFlow
- 原生支持HDFS读写
PyTorch
-
通过Alluxio访问HDFS
-
修改源码增加对HDFS的支持