这是我参与「第四届青训营 」笔记创作活动的的第6天
HDFS原理与应用
课程目标
HDFS设计与实现HDFS的应用场景- 分布式存储系统的概念
文件系统
单机文件系统很常见的就是
Windows,Linux.分布式文件系统:
- 高可靠:有多个副本进行存储,一个挂掉了还有其他机器顶替
- 大容量:因为是分布式的可以用更多的机器作为存储介质
- 低成本:多个机器可以是廉价的机器
HDFS功能特性
- 分布式
- 容错能力
- 高可用、高吞吐
- 可拓展、廉价
HDFS的演示
使用
hdfs开头的命令就是在远程的机器上进行文件系统的操作
HDFS框架
Client,NameNode,DataNode
CLient写入流程
- Client并不知道需要写到哪一个
DataNode中,询问`NameNode```NameNode返回说可以写到哪个DataNode- 写入到副本中
CLient读流程
- 询问那么node需要读取哪个datanode
- 返回目标副本
- 读取
数据节点DataNode
- 数据块的存取
- 心跳回报: 将存放在本机上的数据块列表的信息发送给NameNode
- 副本存储
关键设计
目录树的维护
- 完整的放在内存中
- 定时放到硬盘上面
- 文件系统目录树:文件系统的设计类似于一颗树
- 日志的实现:类似于redoLog, undoLog进行维护
数据块信息的维护
启动的时候通过datanode进行汇报,告诉namenode说我这里的节点的信息,namenode再从内存中进行存储datanode 的位置信息
数据的放置的策略
放置的时候尽可能的进行均衡的放置
DataNode
文件存放在
namenode的时候分割成为block,以block为单位对数据进行存取启动的时候需要进行扫盘,明确本机存放了哪些数据块,将metadata存放在内存中
HDFS写异常处理
假设文件写了一半,client挂掉了可能会产生副本不一致等情况。
租约: 其实就相当于通过
NameNode上了一把锁,拿到这把锁就可进行操作