一、客户端发送写块请求
原理介绍:
1、 客户端向NameNode发送一个写块请求,NodeName接收到这个请求之后给客户端一个消息,就是客户端应该把数据写到哪个DataNode,客户端接着就把数据写到分配到的那个DataNode中。
2、 此时,不管客户端是否写数据成功,都写在edits日记中,此时edits中的数量+1,如果写入成功,则会在内存中添加相应的元数据信息(MetaData)
二、NameNode的更新原理
原理介绍:
1、 NameNode更新机制的触发。条件有两个:一个是时间,最大的时间间隔是3600秒;第二个是edits文件的大小,默认的情况下是当edits的文件大于64M时,而不管是否已经到达了最大时间间隔,都会强制更新fsimage(也就是一些元数据信息);
2、 当NameNode的更新机制触发时,此时会进入一个切换状态,即此时如果收到其他用户的写请求时,不会再把操作信息放入edits中,而是放入文件edits.new文件中,这是为了保持数据一致。
3、 SecondNameNode会从NameNode中下载两个文件,edits和fsimage,通过这两个文件会合成一个新的fsimage(这里叫fsiamge.ckpt)。
4、 当edits和fsimage的信息更新之后,会把最新的fsimage.ckpt发送到NameNode;
5、 此时fsimage.ckpt会替换原来的fsimage文件,此时会把edits文件删除,用edits.new文件替换,前面之所以先不删除edits文件是因为当SecondNameNode更新失败时,可以再次用到。
时间: 2024-10-12 22:59:03