这是我参与「第四届青训营 」笔记创作活动的第8天.
在之前的课程中,我们学习了计算框架Flink、Spark以及查询引擎Presto。下面让我们看看数据是如何存放的。想过以后从事HDFS或者学好可以MIT6.84好多校招都用、开源项目⭐
一、HDFS(Hadoop Distributed File System)基本介绍
1、Hadoop技术体系
2、单机文件系统
- window单机文件系统:物理机中文件类型中的NTFS、FAT32等。
- Linux单机文件系统:
3、分布式文件系统:`单机性能拓展而来,提供了大容量、高可靠、低成本等功能特性,实现较复杂。
- 大容量:更多的机器,更多的存储介质。
- 高可靠:多个副本提高容错能力。
- 低成本:不需要高端硬件来扩容。
4、分布式存储系统
5、HDFS功能特性
(1)分布式:受GFS的启发,用Java实现的开源系统,没有实现完整的POSIX文件系统语义。Posix是移植操作系统接口。
(2)容错:自动处理、规避多种错误场景,例如常见的网络错误、机器宕机等。
(3)高可用:一主多备模式实现元数据高可用、数据多副本实现用户数据的高可用。
(4)高吞吐:Client直接从DataNode读取用户数据、服务端支持海量Client的并发读写。
(5)可扩展:支持联邦集群模式,datanote数量可达10万级别。
(6)廉价:只需要通用硬件,不需要定制高端的昂贵硬件设备。
二、架构原理
1、HDFS组件以及Client写流程
- 底层大多三个副本DN
2、Client读流程
- CLient通知NN要读取数据,NN把DN信息传给CLient。
3、元数据节点NameNode中枢节点
- NN决定Data放在哪个DN上。
4、数据节点DataNode
- CLient/SDK:读写操作的发起点,HDFS很多读写逻辑都是在SDK中实现的。
三、关键设计
1、分布式存储系统基本概念
(1)容错能力:能够处理绝大部分异常场景,例如服务器宕机、网络异常、磁盘故障、网络超时等。
(2)一致性模型:为了实现容错,数据必须多副本存储好处:数据分布在不同节点上,不会导致某个节点出现故障导致数据用不了,一致性要解决的问题是如何保障这个副本的内容都是一致的。
(3)可扩展性:分布性存储系统需要具备横向扩张Scale-out的能力。
(4)节点体系:常见的有主从模式、对等模式,不管哪种模式,高可用是必须的功能。
(5)数据放置:系统是由多个节点组成,数据是多个副本存放时,需要考虑数据存放的策略。NN选DN决策过程
(6)单击存储引擎:在绝大部分存储系统中,数据都是需要落盘持久化,单击引擎需要解决的是根据系统特点,如何高效得存储硬盘数据。
2、NN目录树保护
- fsimage节点仅在内存上修改,Editlog需要立即保存到磁盘上,数据不易丢失
3、NN数据放置
- 数据块信息维护:
(1)目录数保存每个文件的块ID。
(2)NN维护了每个数据块所在的节点信息。
(3)NN根据DN汇报的信息动态维护位置信息。
(4)NN不会持久化数据块位置信息。
- 数据分散在各个节点上,如何定位找到他们?
(1)文件和数据块的映射关系。
(2)数据块的放置分布策略。
4、DataNode
- 上图见块具体信息,数据总容量400MB,切分成3块128M+16M,16M不足一个所以图显示三个BLock。
- 下图data07是硬盘盘符,由某种算法算出、subdir0是Block id、blk_107是数据内容、blk_mata是元数据描述校的信息,其中1019是JS,处理异常使用。
不仅put内容还put数据块信息 - 数据如何落盘存放?
(1)数据块路径。
(2)启动扫盘获得本机文件块列表。
5、HDFS写异常处理
(1)Lease Recovery
- LR:比较三个副本长度,不一致选最小的作为版本,更新它。返回nn作为返回结果。
(2)Pipeline Recovery
6、Client读异常处理
- 异常:Server端异常、Client端异常、慢节点。
7、旁路系统
8、控制面建设:保障系统稳定运行
(1)可观测性建设:帮助快速发现定位问题
- 指标埋点
- 数据采集
- 访问日志
- 数据分析
(2)运维体系建设:从最基本的命令行手工操作脚本自动化,再到完善的运维平台。
- 运维操作需要平台化
- NN操作复杂
- DN机器规模庞大
- 组件控制面API
(3)HouseKeeping组件:比如Balancer、Mover等,这些组件不运行,不会马上影响读写操作,但是长时间会积累系统性问题,例如读写不均衡导致IO热点等。
四、应用场景
1、OLAP查询引擎
2、HBase
3、机器学习
五、课后自测
为什么需要存在这么多不同的分布式存储系统?
在实际运行过程中,HDFS可能会有哪些异常场景?
HDFS诞生于2006年,依照当时的硬件条件设计,以今天的硬件水平来看,哪些设计可以改进?
DataNode的启动扫盘设计存在哪些问题?可以如何优化
什么是分布式系统的“脑裂”?
HouseKeeping组件的设计需要注意哪些点?
HDFS作为通用存储场景,有哪些优缺点?
以各大云厂商相关产品为切入点,大数据存储领域发展有哪些趋势?