这是我参与「第四届青训营 」笔记创作活动的第12天
8.3 关键设计
分布式存储系统基本概念
1)容错能力:能够处理绝大部分异常场景,例如服务器宕机、网络异常、磁盘故障、网络超时等。
2)一致性模型:为了实现容错,数据必须多副本存放,一致性要解决的问题是如何保障这多个副本的内容都是一致的
3)可扩展性:分布式存储系统需要具备横向扩张scale-out的能力
4)节点体系:常见的有主从模式、对等模式等,不管哪种模式,高可用是必须的功能。
5)数据放置:系统是由多个节点组成,数据是多个副本存放时,需要考虑数据存放的策略。
6)单机存储引擎:在绝大部分存储系统中,数据都是需要落盘持久化,单机弓|擎需要解决的是根据系统特点,如何高效得存取硬盘数据。
1.NameNode目录树保护
fsimage:文件系统目录树、完整的存放在内存中、定时存放到硬盘上、修改是只会修改内存中的目录树
EditLog:目录树的修改日志、client更新目录树需要持久化Editlog后才能表示更新成功 、EditLog可存放在本地文件系统,也可存放在专用系统上、NameNode HA方案一个关键点就是如何实现EditLog共享
2.NameNode 数据放置
数据块信息维护:目录树保存每个文件的块id、NameNode维护了每个数据块所在的节点信息 、NameNode根据DataNode汇报的信息动态维护位置信息、NameNode不会持久化数据块位置信息
数据放置策略:新数据存放到哪写节点、数据均衡需要怎么合理搬迁数据、3个副本怎么合理放置
3.DataNode
➢数据块的硬盘存放:文件在NameNode已分割成block、DataNode以block为单位对数据进行存取
➢启动扫盘:DataNode需要知道本机存放了哪些数据块、启动时把本机硬盘上的数据块列表加载在内存中
4.HDFS写异常处理:Lease Recovery
租约:Client要修改一个文件时,需要通过NameNode上锁,这个锁就是租约(Lease)
➢情景:文件写了一半,client 自己挂掉了。
可能产生的问题:副本不一致、Lease无法释放
➢解决方法: Lease Recovery
HDFS写异常处理:Pipeline Recovery
情景:文件写入过程中,DataNode侧出现异常挂掉了
➢异常出现的时机:创建连接时、数据传输时、complete阶段
➢解决方法:Pipeline Recovery
5.Client读异常处理
情景:读取文件的过程,DataNode侧出现异常挂掉了
解决方法:Failover
增强情景:节点半死不过,读取很慢
6.旁路系统
7.控制面建设
可观测性设施:指标埋点、数据采集、访问日志、数据分析
运维体系建设:运维操作需要平台化、NameNode操作复杂、DataNode机器规模庞大、组件控制面API
8.4 应用场景
1.使用HDFS的公司
2.初窥大数据生态
3.演示:PySpark读写HDFS文件
读取本地文件系上的文件
把查询结果保存到本地文件
读取HDFS上的文件
把查询结果保存到HDFS上
4.ETL:Extract,Transform,Load
5.OLAP查询引擎
6.HBase
7.机器学习
原生支持HDFS读写
通过Alluxio访问HDFS、修改源码增加对HDFS的支持
8.通用存储应用