这是我参与「第四届青训营 」笔记创作活动的的第8天。
本节课程主要分为 4 个方面:
1.HDSF基本介绍
2.架构原理
3.关键设计
4.应用场景
一.HDFS基本介绍
1.1.HDFS:Hadoop Distributed File System
1.3.分布式文件系统:
■ 大容量
■ 高可靠
■ 低成本
1.5.HDFS功能特性
1).分布式
2).容错
3).高可用
4).高吞吐
5).可扩展
6).廉价
二.架构原理
2.1.HDFS组件
Client/SDK:读写操作的发起点,HDFS很多读写逻辑都是在SDK中实现的。
NameNode:元数据节点,是HDFS的中枢节点,也是服务的入口。
DataNode:数据节点,存放实际用户数据。
2.4.元数据节点NameNode
1).维护目录树
2).维护文件和数据块的关系
3).维护文件块存放节点信息
4).分配新文件存放节点
2.5.数据节点DataNode
1).数据块存取
2).心跳汇报
3).副本复制
三.关键设计
3.1.分布式存储系统基本概念
○ 容错能力
○ 一致性模型
○ 可扩展性
○ 节点体系模式
○ 数据放置策略
○ 单机存储引擎
3.2.NameNode目录树维护
■ fsimage
✔ 文件系统目录树
✔ 完整的存放在内存中
✔ 定时存放到硬盘
✔ 修改是只会修改内存中的目录树
■ EditLog
✔ 目录树的修改日志
✔ client更新目录树需要持久化EditLog后才能表示更新成功
✔ EditLog可存放在本地文件系统,也可存放在专用系统上
✔ NameNode HA方案一个关键点就是如何实现EditLog共享
NameNode数据放置
■ 数据块信息维护
✔ 目标树保存每个文件的块id
✔ NameNode维护了每个数据块所在的节点信息
✔ NameNode根据DataNode汇报的信息动态维护位置信息
✔ NameNode不会持久化数据块位置信息
■ 数据防止策略
✔ 新数据存放到哪写节点
✔ 数据均衡需要怎么合理搬迁数据
✔ 3个副本怎么合理放置
3.3.DataNode
■ 数据块的硬盘存放
✔ 文件在NameNode已分割成block
✔ DataNode以block为单位对数据进行存取
■ 启动扫盘
✔ DataNode需要知道本机存放了哪些数据块
✔ 启动时把本机硬盘上的数据块列表加载在内存中
3.4.HDFS写异常处理:Lease Recovery
○ 租约:
Client要修改一个文件时,需要通过NameNode上锁,这个锁就是租约(Lease)
○ 情景:文件写了一半,client自己挂掉了
可能产生的问题:
✔ 副本不一致
✔ Lease无法释放
○ 解决方法:Lease Recovery
3.4.1.HDFS写异常处理:Pipeline Recovery
○ 情景: 文件写入过程中,DataNode侧出现异常挂掉了
○ 异常出现的时机:
✔ 创建连接时
✔ 数据传输时
✔ complete阶段
○ 解决方法:Pipeline Recovery
3.5.Client读异常处理
○ 情景: 读取文件的过程,DataNode侧出现异常挂掉了
○ 解决方法:节点Failover
○ 增强情节:节点半死不过,读取很慢
3.6.旁路系统
◌ Balancer
◌ Mover
3.7.控制面建设
◆ 可观测性设施
◎ 指标埋点
◎ 数据采集
◎ 访问日志
◎ 数据分析
◆ 运维体系建设
◎ 运维操作需要平台化
◎ NameNode操作复杂
◎ DataNode机器规模庞大
◎ 组件控制面API
四.应用场景
○ 大数据技术中的应用
◎ HDFS在大数据技术体系中的角色
◎ 演示:PySpark读取分析HDFS上的文件
□ 数据如何产生
□ 数据如何读取
□ 数据如何保存
◎ ETL:数据如何产生、传输
◎ OLAP:如何高效地读取分析数据
○ 存储底座
◎ HBase
◎ 机器学习
◎ 通用场景