这是我参与「第四届青训营 」笔记创作活动的的第7天
HDFS
简单介绍
- HDFS全称为 Hadoop Distributed File System
功能特性
分布式 容错 高可用 高吞吐 可扩展 廉价
基础概念
HDFS组件
- Client/SDK 读写操作的发起点,HDFS很多读写逻辑都是在SDK中实现的。
- NameNode:元数据节点,是HDFS的中枢节点,也是服务的入口。
- DataNode:数据节点,存放实际用户数据。
写流程
读流程
元数据节点NN
- 维护目录树
- 维护文件和数据块的关系
- 文件以数据块为单位,进行多副本存放
- 维护文件块存放节点信息
- 接收DataNode的心跳汇报新信息,维护集群节点的拓扑结构和每个文件块所有副本所在的DataNode类表
- 分配新文件存放节点
数据节点DN
- 数据块存取
- 心跳汇报
- 把存放本机的数据列表发送给NameNode,以便NameNode的维护数据块的位置信息,同时让NameNode确定该节点处于正常存活状态
- 副本复制
- 数据写入时Pipeline IO操作
- 机器故障时补全副本
三、关键设计
基本概念
- 容错能力
- 一致性模型
- 可扩展性
- 节点体系
- 数据放置
- 单机存储引擎
NameNode
目录树维护
- fsimage
- 文件系统目录树
- 完整的存放的内存中
- 顶点存放到硬件上
- 修改是只会修改内存中的目录树
- EditLog
- 目录树的修改日志
- client更新目录树需要持久化EditLog后才能表示更新成功
- EditLog可存放在本地系统,也可存放在专用系统
- NameNode HA方案一个关键点就是实现EditLog共享
数据放置
- 数据块信息维护
- 目录保护每个文件的块id
- NameNode维护每个数据块所在的节点信息
- NameNode根据DataNode汇报的信息动态维护位置信息
- NameNode不会持久化数据块位置信息
- 数据放置策略
- 新数据存放到那写节点
- 数据均衡需要怎么合理搬迁数据
- 3个副本怎么放置合理
DataNode
数据块的硬盘存放
- 文件在NameNode已分割成block
- DataNode以block为单位对数据进行存取
启动扫盘
- DataNode需要知道本机存放哪些数据块
- 启动时把本机硬盘上的数据块列表加载到内存中