在HDFS里,主节点(NN)掌握一批元数据(描述数据的数据) ---->放在内存里面
硬盘和内存的区别:
硬盘:内存大、便宜、但是慢
内存:内存小、贵、但是快
为什么要持久化?
为了保证元数据的安全,要将内存中的数据放到磁盘(硬盘)中---->这就是持久化。
当我们的集群因为断电等原因产生问题的时候,问题解决,重新开机,会去磁盘上读取元数据,恢复到断电前的状态;
谁来持久化?
所以,就需要用到SecondaryNamenode(SNN)来进行持久化操作;
主节点(NN)不能持久化的原因:主节点的工作已经很多了,有可能在持久化的过程中宕机;
SNN永远无法取代NN的位置,他只是NN的一个热备(运行状态下,依然进行备份)
SNN持久化的机制:
持久化的触发条件:超过3600S或edits的大小超过64M---->可更改配置
edits.log------->操作的日志文件 fsimage-------->系统运行产生的数据
流程:当满足触发条件时,SNN将主节点(NN)的edits.log和fsimage剪切到磁盘内,合并为一个新的fsimage文件,然后把该文件再剪切到主节点内;如果又满足触发条件,在上段时间新产生的edits.log文件和剪切过来的faimage又会被剪切到磁盘内,然后合并为一个fsimage文件,剪切到主节点内......(循环往复)
个别情况:另外在启动一个edits里面会同时存在两个edits,fsimage会先和第一个edits进行合并,然后和第二个合并
如果上述情况成为常态,就需要对集群进行调整,调大edits文件的大小
总结:持久化就是将主节点(NN)的元数据写入到磁盘中进行存储,当主节点挂了之后重启的时候,去磁盘读取相应的元数据,恢复集群的状态
NN和DN的通信机制----心跳机制(每隔3S,DN会向NN发送一次心跳,1分钟没有心跳,则认为DN挂掉)
安全模式:
1.恢复系统状态
2.检查DN的信息
3.有问题的DN进行修复
如果在持久化的过程中断电,数据就会丢失;对于重要的数据,就需要提前进行预判进行相应的调整。
当传输完成之后断电:当我的集群重新恢复之后,NN会去读取元数据,对状态进行相应的恢复
如果DN出现问题:在DN恢复之后,如果出现新的任务,根据情况,确定是否将新的文件上传