HDFS原理与运用|青训营笔记
这是我参与「第四届青训营 -大数据场」笔记创作活动的的第4篇笔记
HDFS的构成
分布式文件系统的特点:
-
大容量
机器数量多,存储空间大
-
高可靠
多个副本提高容错能力
-
低成本
不需要高端硬件扩展
HDFS功能特性
-
分布式
java语言实现的GFS的开源版本
-
容错
自动处理,规避多种错误场景
-
高可用
一主多备份实现元数据的高可用,数据多副本实现用户数据的高可用
-
高吞吐
Client直接从DN读取用户数据
-
可扩展
支持联邦集群模式
-
廉价
不需要高端的硬件设备
架构原理
Name Node(元数据节点)
目录树:
功能:
1.维护目录树
维护目录树的增删改查操作,保证所有修改可持久化
防止机器掉电造成数据丢失或不一致
2.维护文件和数据块的关系
文件被切分为多个块,文件一数据块为单位进行多副本存储
3.维护文件块存放结点信息
通过接收DN的心跳汇报信息,维护集群结点的拓扑结构和每个文件所有副本所在的DN类表
4.分配新文件存放节点
Client创建新文件时,需要NN确定分配目标DN
Data Node(元数据节点)
数据块存取
心跳汇报
将存放在本机的数据块列表发送给NN,NN维护数据块的位置信息(因为NN存放元数据信息),同时让NN确定该节点处于正常存活状态
副本复制
数据写入时进行pipeline
机器故障补全副本
关键设计
1.容错(能处理绝大多数异常场景)
2.一致性模型(数据多副本存放,保障多个副本内的内容一样)
3.可扩展
4.节点体系 (保障高可用)
5.数据放置(因为数据多副本,系统多节点,数据放置的合理策略)
6.单机存储引擎(根据系统特点,高效存取硬盘数据)
目录树维护
1.fsimage
- 文件系统目录树
- 完整的存放在内存中
- 定时存放到硬盘中
- 修改只会修改内存的目录树
2.Edit log
- 目录树的修改日志
- client更新目录树需要持久化editlog
- editlog可存放在本机或者专用系统
NN数据放置
数据块信息维护
- 目录树保存每个文件的块id
- NN维护了每个数据块所在的节点信息
- NN根据DN汇报的信息动态维护位置信息
- NN不会持久化数据块位置信息
HDFS异常处理
1.租约
Client要修改一个文件时,需要通过NN上锁,此锁为租约
可能写文件时client挂掉
导致副本不一致、锁无法释放
解决办法:释放锁
2.pipeline recovery
写入时DN端挂掉了
3.Client读异常
读取文件位置时,DN端挂掉了