SecondaryNamenode------持久化
NN掌握一批元数据 ----描述数据的数据 -----内存里
ps:硬盘与内存的区别
硬盘,内存大,便宜,但是慢
内存,内存小,贵,但是快,
为了保证元数据的安全,----将内存中的数据存放到磁盘中,
举个例子,SNN的作用:当我们的集团因断电等特殊原因产生问题的时候,问题解决,重新开机,
会去磁盘上读取元数据,恢复到断电前的状态,SNN做一个数据的保存
NN不能进行持久化的原因,
可以做,需求小,占用内存小,不影响,计算效率
不可以做,NN本身的工作就已经很懂,有可能在持久化过程中 宕机
SNN永远无法取代NN的位置,他只是个NN的热备,
ScondaryNameNode的主要工作,下面是图:
1)fsimage文件其实是Hadoop文件系统元数据的一个永久性的检查点,
其中包含Hadoop文件系统中的所有目录和文件idnode的序列化信息
2)edits文件存放的是Hadoop文件系统的所有更新操作的路径,
文件系统客户端执行的所以写操作首先会被记录到edits文件中。
持久化的触发条件:超过3600S或者也edits的大小超过64M的时候
此时这个地方有个神奇的问题,如果在SNN处理数据的时候又有64M的数据产生,其中机制又是如何实现的呢?图中有详细介绍,如果是个别现象,重启一个edits,NN里面会同时存在两个edits,但如果是常态的话,就需要对集群的属性进行调整,调大edits的大小
总结:持久化将NN的元数据写入到磁盘中,进行存储,当NN挂了之后重启的时候回去磁盘读取相应的元数据,恢复集群的状态----内存断电丢失
ps: 下面举个例子来说明 SecondaryNameNode 在一些特殊情况下面的运行机制
断电
持久化之前, 再次启动,读取系统日志
持久化之后,读取磁盘中的数据,回复状态
重复的断电
NN和DN的通信机制-----心跳机制(每隔3sDN会向NN发送一次心跳,1分钟没有心跳,则认为DN挂掉)
安全模式:
1,恢复系统的状态
2,检查DN的信息
3,有问题的DN进行修复
1,在传输的过程中断电,数据丢失,如果数据特别重要,那只能提前进行预判,进行相应的调整
2,传输完成之后断电,当我的集群重新恢复之后,NN是不是会去读取元数据,对状态进行相应的回复
若DN出现问题,在DN恢复之后,如果新的任务,根据情况,确定是否将新的文件上传