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

70 阅读5分钟

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

在之前的课程中,我们学习了计算框架Flink、Spark以及查询引擎Presto。下面让我们看看数据是如何存放的。想过以后从事HDFS或者学好可以MIT6.84好多校招都用、开源项目⭐

一、HDFS(Hadoop Distributed File System)基本介绍

1、Hadoop技术体系

屏幕截图 2022-08-03 213308.jpg

2、单机文件系统

  • window单机文件系统:物理机中文件类型中的NTFS、FAT32等。
  • Linux单机文件系统:

屏幕截图 2022-08-03 213828.jpg

3、分布式文件系统:`单机性能拓展而来,提供了大容量、高可靠、低成本等功能特性,实现较复杂。

屏幕截图 2022-08-03 214031.jpg

  • 大容量:更多的机器,更多的存储介质。
  • 高可靠:多个副本提高容错能力。
  • 低成本:不需要高端硬件来扩容。

4、分布式存储系统

屏幕截图 2022-08-03 214333.jpg

5、HDFS功能特性

(1)分布式:受GFS的启发,用Java实现的开源系统,没有实现完整的POSIX文件系统语义。Posix是移植操作系统接口。

(2)容错:自动处理、规避多种错误场景,例如常见的网络错误、机器宕机等。

(3)高可用:一主多备模式实现元数据高可用、数据多副本实现用户数据的高可用。

(4)高吞吐:Client直接从DataNode读取用户数据、服务端支持海量Client的并发读写。

(5)可扩展:支持联邦集群模式,datanote数量可达10万级别。

(6)廉价:只需要通用硬件,不需要定制高端的昂贵硬件设备。

二、架构原理

1、HDFS组件以及Client写流程

屏幕截图 2022-08-03 215133.jpg

  • 底层大多三个副本DN

2、Client读流程

屏幕截图 2022-08-03 215358.jpg

  • CLient通知NN要读取数据,NN把DN信息传给CLient。

3、元数据节点NameNode中枢节点

  • NN决定Data放在哪个DN上。

屏幕截图 2022-08-03 215659.jpg

4、数据节点DataNode

屏幕截图 2022-08-03 215815.jpg

  • CLient/SDK:读写操作的发起点,HDFS很多读写逻辑都是在SDK中实现的。

三、关键设计

1、分布式存储系统基本概念

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

(2)一致性模型:为了实现容错,数据必须多副本存储好处:数据分布在不同节点上,不会导致某个节点出现故障导致数据用不了,一致性要解决的问题是如何保障这个副本的内容都是一致的。

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

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

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

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

2、NN目录树保护

屏幕截图 2022-08-03 221100.jpg

  • fsimage节点仅在内存上修改,Editlog需要立即保存到磁盘上,数据不易丢失

3、NN数据放置

  • 数据块信息维护:

(1)目录数保存每个文件的块ID。

(2)NN维护了每个数据块所在的节点信息。

(3)NN根据DN汇报的信息动态维护位置信息。

(4)NN不会持久化数据块位置信息。

  • 数据分散在各个节点上,如何定位找到他们?

(1)文件和数据块的映射关系。

(2)数据块的放置分布策略。

4、DataNode

屏幕截图 2022-08-03 221629.jpg

  • 上图见块具体信息,数据总容量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

屏幕截图 2022-08-03 222732.jpg

  • LR:比较三个副本长度,不一致选最小的作为版本,更新它。返回nn作为返回结果。

(2)Pipeline Recovery

屏幕截图 2022-08-03 223120.jpg

6、Client读异常处理

屏幕截图 2022-08-03 223222.jpg

  • 异常:Server端异常、Client端异常、慢节点。

7、旁路系统

屏幕截图 2022-08-03 223304.jpg

8、控制面建设:保障系统稳定运行

(1)可观测性建设:帮助快速发现定位问题

  • 指标埋点
  • 数据采集
  • 访问日志
  • 数据分析

(2)运维体系建设:从最基本的命令行手工操作脚本自动化,再到完善的运维平台。

  • 运维操作需要平台化
  • NN操作复杂
  • DN机器规模庞大
  • 组件控制面API

(3)HouseKeeping组件:比如Balancer、Mover等,这些组件不运行,不会马上影响读写操作,但是长时间会积累系统性问题,例如读写不均衡导致IO热点等。

四、应用场景

屏幕截图 2022-08-03 223756.jpg

1、OLAP查询引擎

屏幕截图 2022-08-03 223922.jpg

2、HBase

屏幕截图 2022-08-03 224011.jpg

3、机器学习

屏幕截图 2022-08-03 224053.jpg

五、课后自测

为什么需要存在这么多不同的分布式存储系统?

在实际运行过程中,HDFS可能会有哪些异常场景?

HDFS诞生于2006年,依照当时的硬件条件设计,以今天的硬件水平来看,哪些设计可以改进?

DataNode的启动扫盘设计存在哪些问题?可以如何优化

什么是分布式系统的“脑裂”?

HouseKeeping组件的设计需要注意哪些点?

HDFS作为通用存储场景,有哪些优缺点?

以各大云厂商相关产品为切入点,大数据存储领域发展有哪些趋势?