SecondryNameNode的职责是合并NameNode的edit logs 到fsimage文件中。
虽然说NameNode可以做持久化但是操作,但是当NameNode遇到一些特殊原因,比如说断电,重启等原因,会导致edit logs 变的很大,怎么取管理这个文件也是一个问题。所以说NameNode就找了一个下手,这个下手就是SecondryNameNode.
首先说一下
edit logs 中打印的信息是NameNode已经启动的情况下对Hdfs进行的各种更新操作的记录。Hdfs客户端执行的写操作也会被记录到edit logs 中。
fsimage中保存了最新的元数据检查点,在hdfs启动的时候加载fsimage的信息。
fsimage中包括所有的系统信息,每秒都会产生信息向fsimage中存放。
数据持久化会有两个触发条件。
如果edit logs 发送到了SecondryNameNode之后,edit logs又超过了64M
两个解决方案。
数据持久化操作其实就是讲NameNode将元数据存储到磁盘中,当NameNode碰到问题之后再磁盘中读取相应的元数据,然后恢复到碰到问题之前的状态。
NameNode和DataNode中会有一种通信机制。这种机制就叫心跳机制。
为什么会有这种机制 比如说,你是一家公司的老板,你的员工被秘书全拐走了,
秘书还告诉你,你的员工还都在,如果你和你自己的员工之间有通信就不会是这种情况了。
心跳机制:默认设置DataNode会向NameNode每隔3秒发送一次心跳,如果一分钟没有发送,那么NameNode会认为这个DataNode已经挂掉了。
如果NameNode认为DataNode已经挂掉 就不会再向DataNode发送数据,会向其他的DataNode继续发送数据
如果DataNode修复好之后,NameNode如果发送的还是之前的block块那么不会在发送给
DataNode,如果是新的block块将会继续启用这个DataNode。