这是我参与「第四届青训营 」笔记创作活动的第8天
1. HDFS原理与应用
1.1 HDFS原理
HDFS(Hadoop Distributed File System)是一个分布式文件系统,是谷歌的GFS山寨版本。它具有高容错性并提供了高吞吐量的数据访问,非常适合大规模数据集上的应用,它提供了一个高度容错性和高吞吐量的海量数据存储解决方案。
高吞吐量访问:HDFS的每个Block分布在不同的Rack上,在用户访问时,HDFS会计算使用最近和访问量最小的服务器给用户提供。由于Block在不同的Rack上都有备份,所以不再是单数据访问,所以速度和效率是非常快的。另外HDFS可以并行从服务器集群中读写,增加了文件读写的访问带宽。
高容错性:系统故障是不可避免的,如何做到故障之后的数据恢复和容错处理是至关重要的。HDFS通过多方面保证数据的可靠性,多份复制并且分布到物理位置的不同服务器上,数据校验功能、后台的连续自检数据一致性功能都为高容错提供了可能。
线性扩展:因为HDFS的Block信息存放到NameNode上,文件的Block分布到DataNode上,当扩充的时候仅仅添加DataNode数量,系统可以在不停止服务的情况下做扩充,不需要人工干预。
1.2 架构原理
1.3 组件
- 块(Block):将一个文件进行分块,通常是64M。写入后不能修改,但是可以追加。
- 名称节点(NameNode):保存整个文件系统的目录信息、文件信息及分块信息,如果主 NameNode 失效,切换到Secondary NameNode。
- 数据节点(DataNode):分布在廉价的计算机上,用于存储Block块文件。
- 客户端(Client):通过与 NameNode和DataNode 交互访问HDFS中的文件。
其中,DataNode和NameNode是HDFS的两大核心。
1.3.1 名称节点(NameNode)
NameNode管理文件系统的命名空间,它维护着文件系统树及整棵树内所有的文件和目录,即元数据(MetaData)。元数据有三种存储方式:
- 内存元数据,目的是提升性能,定期从磁盘加载一份镜像到内存中。
- 命名空间镜像文件(fsImage),保存整个文件系统的目录树。
- 编辑日志文件(edits),记录文件系统元数据发生的所有更改,如文件的删除或添加等操作信息。
1.3.2 数据节点(DataNode)
DataNode角色的节点是真正存放块(block)数据的节点,当DataNode启动时,它将扫描其本地文件系统,生成与每个本地文件相对应的所有HDFS数据块的列表,并将此报告发送到NameNode。该报告称为BlockReport。
1.4 应用场景
- ETL:Extract,Transform,Load
- OLAP 查询引擎:
- HBase:
- 机器学习:Tensenflow(原生支持 HDFS 读写)、PyTorch(通过 Alluxio 访问 HDFS、修改源码支持)
- 通用存储应用:对象存储、消息队列、冷数据层、海量日志、备份数据
总结
- 了解HDFS的使用场景,尤其是在大数据场景中的常规应用,同时也了解HDFS在其它场景的一些应用,加深对存储系统应用场景的理解;
- 了解HDFS的设计与实现,包括基本功能、运维体系等,对生产环境里分布式存储系统体系化建设有进一步认知;
- 了解了一个分布式存储系统涉及的基本概念和设计问题