HDFS原理与应用笔记(二)| 青训营笔记
这是我参与「第四届青训营 -大数据场」笔记创作活动的第12天
三、HDFS关键设计
1. 分布式存储系统基本概念
- 容错能力:能处理绝大部分异常场景
- 一致性模型:为了实现容错,数据必须多副本存放,解决的问题是如何保证其一致性
- 可扩展性:分布式存储系统需要具备横向扩张scale-out的能力
- 节点体系:常见的有主从模式、对等模式等、不管哪种模式,高可用是必须的功能
- 数据放置:系统实由多个节点组成,数据是多个副本存放是,需要考虑数据存放的策略
- 单机存储引擎:在绝大部分存储系统中,数据都是需要落盘持久化,单机引擎需要解决的事根据系统特点,如何高效存取硬盘数据
2. NameNode目录树设计
2.1 fsimage
- 文件系统目录树
- 完整的存放在内存中
- 定时存放到硬盘上
- 修改是只会修改内存中的目录树
2.2 EditLog
- 目录树的修改日志
- client更新目录树需要持久化EditLog后才能表示更新成功
- EditLog可存放在本地文件系统,也可存放在专用系统上
- NameNode HA方案一个关键点就是如何实现EditLog共享
3. NameNode数据放置
3.1 数据块信息维护
- 目录树保存每个文件的块id、
- NameNode维护了每个数据块所在的节点信息、
- NameNode根据DataNode汇报的信息动态维护位置信息
- NameNode不会持久化数据块位置信息
3.2 数据块放置策略
- 新数据存放到哪个节点
- 数据均衡需要怎么合理搬迁数据
- 3个副本怎么合理放置
4. DataNode设计
4.1 数据块磁盘存放
- 文件在NameNode已分割成block
- DataNode以block为单位对数据进行存取
4.2 启动扫盘
- DataNode需要知道本机存放了那些数据块
- 启动时把本机硬盘上的数据块列表加载在内存中
5. HDFS写异常处理
5.1 Lease Recovery
- 情景:文件写了一半,client自己挂掉了。
- 可能产生的问题:副本不一致、Lease无法释放
- 租约:Client 要修改一个文件时,需要通过NameNode上锁,这个锁就是租约(Lease)。
- 解决方法:Lease Recovery
5.2 Pipeline Recovery
- 情景:文件写入过程中,DataNode侧出现异常挂掉了
- 异常出现的时机:创建连接时(Pipeline重新选择)、数据传输时(Pipeline重新构建)、complete阶段(Pipeline重新衔接、构建)
- 解决方法:Pipeline Recovery
6. Client读异常处理
- 情景:读取文件的过程,Dataode侧出现异常挂掉了
- 解决方法:节点Failover
- 增强情景:半死不活,读取很慢怎么办,对其进行优化切换
7. HDFS旁路系统
- Balancer:均衡DataNode的容量
- Mover:确保副本放置符合策略要求
8. HDFS控制面建设
-
HouseKeeping组件:比如Balancer,Mover等, 这些组件不运行不会马上影响读写操作,但是长时间会积累系统性问题,例如读写不均衡导致IO热点等。
-
可观测性设施:
- 指标埋点
- 数据采集
- 访问日志
- 数据分析
-
运维体系建设:
- 运维操作需要平台化
- NameNode操作复杂
- DataNode机器规模庞大
- 组件控制面API
四、HDFS应用场景
-
大数据技术中的应用
-
HDFS在大数据技术体系中的角色
-
演示:PySpark读取分析HDFS上的文件
- 数据如何产生
- 数据如何读取
- 数据如何保存
-
ETL:数据如何产生、传输
-
OLAP:如何高效地读取分析数据
-
-
存储底座
- HBase
- 机器学习
- 通用场景