这是我参与「第四届青训营 」笔记创作活动的第2天
1 Hadoop应用体系
像flink、spark都是一些大数据常用的框架,调度层大多采用yarn调度系统,而底层存储则由hdfs知名。
2 HDFS介绍
- Hadoop Distributed File System:分步式文件系统
- 源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版
- HDFS是Hadoop体系中数据存储管理的基础
- 通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序
- 提供一次写入多次读取的机制,数据以块的形式,同时分布在集群不同物理机器上
- 高度容错性的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行
3 分布式存储系统优势
- 大容量:更多的机器,更多的存储介质
- 高可靠:多个副本提高容错能力
- 低成本:不需要高端硬件来支撑
4 HDFS功能特性
5 HDFS组件
5、1 NameNode
- 作用是接收客户端读写,存元数据信息
- 元数据信息包括文件谁所有,权限,用户对文件的操作信息(edit logs),文件被分成几块(Block ID),块存在哪些DataNode
- NameNode如何将数据保存到磁盘?元数据主要保存在fsimage和edit logs
- NameNode启动后将元数据加载到内存,磁盘文件名为fsimage,块的位置信息不会保存到fsimage,而由DataNode启动时主动上报给NameNode,edit记录操作日志
- 一个集群中有且只有一台NameNode处于active状态
5、2 DataNode
- DataNode用来真正存数据,数据按块存,当DN启动会向NN汇报块信息
- DataNode之间还保存数据的副本,实现数据节点的互相拷贝
- DN与NN间需要维护心跳,3s一次,当10min没收到心跳,则NN认为DN掉线,会复制该DN上的块到其他DN上
- NN对DN还有重平衡机制,因为随着时间推移,DN上存储的数据总数不同,磁盘空间大小不同,可以调用命令整理磁盘,若不重平衡会导致系统由响应最慢的节点决定
5、3 Client写流程
5、4 Client读流程
5、5 HDFS写异常:Lease Recovery
5、6 块(Block)数据存储单元
- 文件被切分成固定大小的数据块
- 查找数据块比较方便,因为在磁盘上找文件时由指针移动来寻找,所以移动块比字节要快
- 数据块大小默认为128MB(可配置)
- 若文件大小不到128MB可以单独存一个块,但过多小文件每次都单独存一个块,而块存于NN,NN存于内存,内存有限,从而集群中的存储量有限,所以存数据是需要将小文件合并成大文件,尽量填满一个数据快再存;文件大小大于128MB,则会切分
- 将切分后的数据块存储到不同节点上,默认情况每个Block都有三个备份,副本采用负载均衡,随机存放策略,防止数据倾斜,即数据都存放在一个节点上,发生数据倾斜,可以使用重平衡策略
- 当DN挂掉后自动生成该节点的副本,以保证备份数为3,当该节点恢复后不会删除多余副本,多余副本就会导致节点数据量不同,所以需要上面提到的重平衡
- 块大小和副本数通过客户端上传文件时设定,文件上传成功后副本数可以变更,但块大小不行
5、7 块副本存放策略
- 先将block发送给第一个datanode,根据指定副本数量,copy一份发送给下一个