Hadoop原理(一):NameNode与Secondary NameNode工作机制
本文为学习笔记,对应视频教程来自尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优)P59
NameNode介绍
官方文档的介绍
HDFS has a master/slave architecture. An HDFS cluster consists of a single NameNode, a master server that manages the file system namespace and regulates access to files by clients. In addition, there are a number of DataNodes, usually one per node in the cluster, which manage storage attached to the nodes that they run on. HDFS exposes a file system namespace and allows user data to be stored in files. Internally, a file is split into one or more blocks and these blocks are stored in a set of DataNodes. The NameNode executes file system namespace operations like opening, closing, and renaming files and directories. It also determines the mapping of blocks to DataNodes. The DataNodes are responsible for serving read and write requests from the file system’s clients. The DataNodes also perform block creation, deletion, and replication upon instruction from the NameNode.
HDFS 具有主/从架构。一个 HDFS 集群包含一个 NameNode,这是一个管理文件系统命名空间和控制客户端对文件的访问的主服务器。此外,还有许多 DataNode,通常集群中每个节点一个,用于管理它们运行的节点的存储。HDFS 公开了一个文件系统命名空间,并允许将用户数据存储在文件中。在内部,一个文件被分成一个或多个块,这些块存储在一组 DataNode 中。NameNode 执行文件系统命名空间操作,例如打开、关闭和重命名文件和目录。它还确定块到 DataNode 的映射。DataNode 负责处理来自文件系统客户端的读取和写入请求。DataNodes 还负责块创建、删除、根据NameNode的指示进行复制。
NameNode工作机制
问题引入
- NameNode即要维护元数据信息,又要响应客户端请求,因此要满足高效率,数据必须放在内存当中;
- 每个集群只有一个NameNode,要保证数据可靠,数据必须存在磁盘上。
解决方案
- 元数据信息保存在内存中,但是磁盘上必须要有其备份fsimage;
- 每次client发生请求时,为4提高响应速度,磁盘上并不直接保存修改后的数据而是引入Edits文件追加相应的操作(随机IO变为顺序IO);
- 使用Secondary NameNode定期合并fsimage和Edits文件防止Edits文件过大。
工作机制
NameNode正常运行
- 第一次启动 NameNode 格式化后,创建 Fsimage 和 Edits 文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存;
- 客户端对元数据进行增删改的请求时,NameNode将操作记录在滚动日志edits_inprogress_00n上;
- NameNode 在内存中对元数据进行增删改后相应客户端。
Secondary NameNode触发CheckPoint
- 当满足CheckPoint触发条件后,Secondary NameNode想NameNode请求执行CheckPoint;
- NameNode将之前的滚动日志edits_inprogress_00n重命名为edits_00n,并将新操作记录在edits_inprogress_00n+1文件中;
- Secondary NameNode拷贝NameNode的Fsimage和edits_00n到本地内存中就行合并操作,生成新的镜像文件 fsimage.chkpoint;
- NameNode拷贝fsimage.chkpoint文件到本地并覆盖原有文件fsimage。