HDFS 原理与应用 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第10天
分布式存储
- High Availability: 高可用
- Throughput: 吞吐量
- Scale Out: 水平扩展
- Scale Up:纵向扩展
- Fault-Tolerance: 容错
- Erasure Coding/EC: 纠删码
HDFS基础介绍
HDFS:Hadoop Distributed File System
1.1 Windows单机文件系统
1.2 Linux单机文件系统
包括:BTRFS、ZFS、XFS、EXT4等100种文件系统
1.3 分布式文件系统
分布式文件系统是单机文件系统的一种延伸,可以解决单价文件系统所不能的问题
根据存储不同可以分为以下几类:
HDFS功能介绍
- 分布式:
- 受GFS启发,用Java实现的开源系统,没有实现完整的POSIX文件系统语义
- 容错:
- 自动处理、规避多种错误场景,例如常见的网络错误、机器宕机等
- 高可用:
- 一主多备模式实现元数据高可用,数据多副本实现用户数据的高可用
- 高吞吐:
- Client直接从DataNode读取用户数据,服务端支持海量client并发读写
- 可扩展:
- 支持联邦集群模式,DataNode数量可达10w级别
- 廉价:
- 只需要通用硬件,不需要定制高端的昂贵硬件设备
架构原理
-
HDFS组件
- Client/SDK:读写操作的发起点,HDFS很多读写逻辑都是在SDK中实现的。
- NameNode:元数据节点,是HDFS的中枢节点,也是服务的入口。
- DataNode:数据节点,存放实际用户数据。
关键设计
-
NameNode目录树设计,重点理解EditLog的设计,可类比关系型数据库中的Transaction Log概念。
- 仅在内存中修改:fsimage
- 需要立即保存到硬盘:EditLog
-
NameNode数据放置:数据分散在各个节点上,如何定位找到它们?
- 文件和数据块的映射关系
- 数据块的放置分布策略
-
DataNode设计:数据如何落盘存放?
- 数据块路径
- 启动扫盘获得本机文件块列表
-
Client读写链路的异常处理
- Server端异常
- Client端异常
- 慢节点
-
控制面建设:保障系统稳定运行
- HouseKeeping组件:比如Balancer,Mover等, 这些组件不运行不会马上影响读写操作,但是长时间会积累系统性问题,例如读写不均衡导致IO热点等。
- 可观测性设施:比如系统指标监控设施等,帮助快速发现定位问题。
- 运维体系建设:从最基本的命令行手工操作,脚本自动化再到完善的运维平台。
应用场景
-
大数据技术中的应用
-
HDFS在大数据技术体系中的角色
-
演示:PySpark读取分析HDFS上的文件
- 数据如何产生
- 数据如何读取
- 数据如何保存
-
ETL:数据如何产生、传输
-
OLAP:如何高效地读取分析数据
-
-
存储底座
- HBase
- 机器学习
- 通用场景