1.存储模型
2.架构设计
3.角色功能
PS:角色对应的就是一个或者多个进程
4.元数据持久化
5.安全模式
HDFS合并EditLog与FsImage的过程:
- HDFS启动前会进行格式化,生成一个空的FsImage,假设HDFS集群在8:00时进行第一次初始化启动
- 8:00 - 9:00 期间,对HDFS的操作记录在EditLog中,NameNode内存中存储了相关的元数据,但是此时硬盘中的FsImage还是空的
- 假设9点到达checkpoint,Secondary NameNode拉取NameNode中的FsImage(此时为空),以及EditLog(记录了8:00 - 9:00的操作日志),NameNode同时会生成一个新的EditLog,记录9:00以后的操作日志
- Secondary NameNode将拉取到的EditLog合并到FsImage中,合并完成之后,将其推送到NameNode
- NameNode使用新的FsImage替换之前旧的FsImage,将NewEditLog(记录9:00的操作日志)替换之前的EditLog(记录的是8:00 - 9:00的操作日志)。
6.副本放置策略
7.读写流程
下图描述了在某一时间点,客户端往HDFS上传一个块的示意图:
- 客户端与NameNode交互,告诉NameNode需要上传文件
- NameNode触发副本放置策略,告诉客户端块的副本放到哪些节点,节点是有序的
- 客户端与第一个节点创建TCP连接,并告诉这个节点,后面的节点是哪些
- 第一个节点与第二个结点建立连接,并告诉第二个节点,后面的节点是哪些
- 同理,这些副本放置节点会串联起来
- 客户端将块分为多个小块,依次将小块传输给第一个节点
- 客户端将第一个小块往第二个节点传输完成后,就开始向其传输第二个小块,与此同时,第一个节点就会向第二个节点传输第一个小块
- 类推下去,与流水线类似,客户端只需要往第一个节点传输数据,就能完成将数据传输到多个节点的功能。且耗费的时间比客户端分别向多个节点传输花费的时间更少。这里,流水线传输就类似于一个变种的并行传输。
HDFS读流程:
参考链接:
清华大牛精讲Hadoop全套教程_从入门到精通(HDFS集群/MapReduce底层原理、源码~~)_哔哩哔哩_bilibili