HDFS原理与应用(2)| 青训营笔记

71 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第12天

8.3 关键设计

分布式存储系统基本概念

1)容错能力:能够处理绝大部分异常场景,例如服务器宕机、网络异常、磁盘故障、网络超时等。

2)一致性模型:为了实现容错,数据必须多副本存放,一致性要解决的问题是如何保障这多个副本的内容都是一致的

3)可扩展性:分布式存储系统需要具备横向扩张scale-out的能力

4)节点体系:常见的有主从模式、对等模式等,不管哪种模式,高可用是必须的功能。

5)数据放置:系统是由多个节点组成,数据是多个副本存放时,需要考虑数据存放的策略。

6)单机存储引擎:在绝大部分存储系统中,数据都是需要落盘持久化,单机弓|擎需要解决的是根据系统特点,如何高效得存取硬盘数据。

1.NameNode目录树保护

fsimage:文件系统目录树、完整的存放在内存中、定时存放到硬盘上、修改是只会修改内存中的目录树

EditLog:目录树的修改日志、client更新目录树需要持久化Editlog后才能表示更新成功 、EditLog可存放在本地文件系统,也可存放在专用系统上、NameNode HA方案一个关键点就是如何实现EditLog共享

image.png

image.png

2.NameNode 数据放置

数据块信息维护:目录树保存每个文件的块id、NameNode维护了每个数据块所在的节点信息 、NameNode根据DataNode汇报的信息动态维护位置信息、NameNode不会持久化数据块位置信息

数据放置策略:新数据存放到哪写节点、数据均衡需要怎么合理搬迁数据、3个副本怎么合理放置

image.png

3.DataNode

➢数据块的硬盘存放:文件在NameNode已分割成block、DataNode以block为单位对数据进行存取

➢启动扫盘:DataNode需要知道本机存放了哪些数据块、启动时把本机硬盘上的数据块列表加载在内存中

image.png

image.png

4.HDFS写异常处理:Lease Recovery

租约:Client要修改一个文件时,需要通过NameNode上锁,这个锁就是租约(Lease)

➢情景:文件写了一半,client 自己挂掉了。

可能产生的问题:副本不一致、Lease无法释放

➢解决方法: Lease Recovery

image.png

HDFS写异常处理:Pipeline Recovery

情景:文件写入过程中,DataNode侧出现异常挂掉了

➢异常出现的时机:创建连接时、数据传输时、complete阶段

➢解决方法:Pipeline Recovery image.png

5.Client读异常处理

情景:读取文件的过程,DataNode侧出现异常挂掉了

解决方法:Failover

增强情景:节点半死不过,读取很慢

image.png

6.旁路系统

image.png

7.控制面建设

可观测性设施:指标埋点、数据采集、访问日志、数据分析

运维体系建设:运维操作需要平台化、NameNode操作复杂、DataNode机器规模庞大、组件控制面API

8.4 应用场景

1.使用HDFS的公司

image.png

2.初窥大数据生态

image.png

3.演示:PySpark读写HDFS文件

读取本地文件系上的文件

把查询结果保存到本地文件

读取HDFS上的文件

把查询结果保存到HDFS上

4.ETL:Extract,Transform,Load

image.png

5.OLAP查询引擎

image.png

6.HBase

image.png

7.机器学习

image.png 原生支持HDFS读写

image.png

通过Alluxio访问HDFS、修改源码增加对HDFS的支持

8.通用存储应用

image.png