1、NameNode
是Master,他是一个主管、管理者。也叫HDFS的元数据节点。集群中只能有一个Active的NameNode对外提供服务。
- 管理HDFS的名称空间(文件目录树),HDFS很方便的一点就是对于用户来说很友好,用户不考虑细节的话,看到的目录结构和我们使用window和linux文件系统很像。
- 管理数据块(Block)映射信息及副本信息;一个文件对应的块的名字以及被储存在哪里,以及每一个文件备份多少都是有NameNode来管理。
- 处理客户端读写请求。
2、DataNode
是slave。实际存储数据块的节点,NameNode下达命令,DataNode执行实际操作。
- 存储实际的数据块。
- 执行数据块的读/写操作。
3、SecondaryNameNode
SecondaryNameNode有两个作用,一是镜像备份,二是日志与镜像的定期合并,及合并NameNode的 edit logs (用户操作的编辑文件) 到 fsimage 文件中。
第一阶段:NameNode启动
- 第一次启动NameNode格式化后,创建fsimage 和 edits 文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
- 客户端对元数据进行增删改的请求。
- NameNode记录操作日志,更新滚动日志。
- NameNode在内存中对数据进行增删改查。
第二阶段:SecondaryNameNode 工作
- SecondaryNameNode 询问NameNode是否需要checkpoint。直接带回NameNode是否检查结果。
- SecondaryNameNode 请求执行checkpoint。
- NameNode滚动正在写的edits日志。
- 将滚动前的编辑日志和镜像文件拷贝到SecondaryNameNode。
- SecondaryNameNode 加载编辑日志和镜像文件到内存,并合并。
- 生成新的镜像文件 fsimage.checkpoint。
- 拷贝 fsimage.checkpoint 到 NameNode。
- NameNode 将fsimage.checkpoint重新命名为fsimage。