青训营 HDFS原理与应用
概述
2022の夏天,半壶水响叮当的我决定充实一下自我
一、内容介绍
青训营
总述
- 了解HDFS的使用场景,尤其是在大数据场景中的常规应用,同时也了解HDFS在其它场景的一些应用,加深对存储系统应用场景的理解。
- 了解HDFS的设计与实现,包括基本功能、运维体系等,对生产环境里分布式存储系统体系化建设有进一步认知。
- 抽象总结一个分布式存储系统涉及的基本概念和设计问题
目标
- HDFS的设计与实现
- HDFS的产品化体系建设
- HDFS多场景的应用
- 分布式存储系统通用基本概念
相关术语:
1.1基础知识
- 操作系统
- 文件系统
- POSIX文件系统
- Linux
- Python
1.2大数据术语
- Hadoop
- Spark
- Flink
- Kafka
- OLAP/OLTP
- Data warehouse: 数据仓库
- AWS S3 / 阿里云OSS
- HDFS
- HBase
1.3分布式存储
- High Availability: 高可用
- Throughput: 吞吐量
- Scale Out: 水平扩展
- Scale Up:纵向扩展
- Fault-Tolerance: 容错
- Erasure Coding/EC: 纠删码
二、HDFS基本介绍
2.1 HDFS: Hadoop Distributed File System/分布式文件系统
2.2 Windows单机文件系统
2.3 Linux单机文件系统
2.4 分布式文件系统
2.5 分布式存储系统
2.6 HDFS 功能特性
2.7 演示环境一HDFS节点
前两个为高可用
hdfs指令:
- ls:文件目录
- put:文件传输本地传HDFS
三、架构原理
HDFS架构介绍和组件用途
HDFS各组件的重要设计
3.1 HDFS组件
3.2 Client/客户端写/读流程
- 写
- 读
3.3 元数据节点NameNode
-
维护目录树 维护目录树的增删改查操作,保证所有修改都能持久化,以便机器掉电不会造成数据丢失或不—致
-
维护文件和数据块的关系 文件被切分成多个块,文件以数据块为单位进行多副本存放
-
维护文件块存放节点信息 通过接收DataNode的心跳汇报信息,维护集群节点的拓扑结构和每个文件块所有副本所在的DataNode类表。
-
分配新文件存放节点 Client创建新的文件时候,需要有NameNode来确定分配目标DataNode
3.4 数据节点DataNode
-
数据块存取 DataNode需要高效实现对数据块在硬盘上的存取
-
心跳汇报 把存放在本机的数据块列表发送给NameNode,以便NameNode能维护数据块的位置信息,同时让NameNode确定该节点处于正常存活状态
-
副本复制
- 数据写入时Pipeline IO操作
- 机器故障时补全副本
四、关键设计
分布式存储系统基本原理
4.1. 分布式存储系统基本概念
4.2. NameNode目录树维护
4.3. NameNode数据放置
- 数据块信息维护
- 目录树保存每个文件的块id
- NameNode维护了每个数据块所在的节点信息
- NameNode根据DataNode汇报的信息动态维护位置信息
- NameNode不会持久化数据块位置信息
- 数据放置策略
- 新数据存放到哪写节点
- 数据均衡需要怎么合理搬迁数据
- 3个副本怎么合理放置
4.4. DataNode
高效,为了读取
绿:data07:文件系统的盘符
红:哈希算法得出:内容+校验码
4.5. HDFS 写异常处理: Lease Recovery/租约恢复
-
租约: Client要修改一个文件时,需要通过NameNode 上锁,这个锁就是租约(Lease),租约时间为响应NameNode时间
-
情景: 文件写了一半,client自己挂掉了。可能产生的问题:
- 副本不一致
- Lease无法释放
- 解决方法:
- Lease Recovery/收回租约
- 选DataNode中最小,同步另外两个,返回NameNode,作最后结果
4.6. HDFS写异常处理:Pipeline Recovery/流水线恢复
-
情景: 文件写入过程中,DataNode侧(serve侧)出现异常挂掉了
-
异常出现的时机:
- 创建连接时- 重连接
- 数据传输时- 重构pipeline
- complete阶段- 重构pipeline
- 解决方法: Pipeline Recovery/管道恢复
4.7. Client读异常处理
-
情景: 读取文件的过程,DataNode侧出现异常挂掉了
-
解决方法: 节点Failover/故障转移/换节点
-
增强情景: 节点半死不过,读取很慢(都问题,来回切换)
4.8. 旁路系统
Balancer:均衡DataNode的容量
Mover:确保副本放置符合策略要求
4.9. 控制面建设
- 可观测性设施
- 指标埋点
- 数据采集
- 访问日志
- 数据分析
- 运维体系建设
- 运维操作需要平台化
- NameNode操作复杂
- DataNode机器规模庞大
- 组件控制面API
五、应用场景
大数据生态中的应用 通用存储场景
5.1 使用HDFS的公司
5.2 初窥大数据生态
5.2 演示: PySpark读写HDFS文件
实验一
实验二
-
读取本地文件系上的文件
-
把查询结果保存到本地文件
-
读取HDFS上的文件
-
把查询结果保存到HDFS上
5.3 ETL(解决大量数据写): Extract, Transform, Load
ETL:提取、变换、装载
5.4 OLAP(解决大量数据读)查询引擎
5.5 HBase(存储基座)
5.6 机器学习
5.7 通用存储应用
晚安玛卡巴卡
快乐暑假