学习大数据之hadoop day2
secendaryNamenode
SecendaryNamenode 看上去 好像Namenode 的替代品 ,但是加上和namenode功能不太一样
SecendaryNamenode(以下简称snn)是用于保护Namenode(下简称nn)产生的元数据 而产生的
的一个功能,我们都知道nn运行时所产生的元数据是储存在内存中的,我们都知道,如果内存断电,或者意外关机
那么我们集群所收集到的数据就会全部丢失,所以,着这种需求下,我们用到了snn ,可以将nn产生的元数据持久化
到硬盘
我们的集群运行,操作,进行读写操作的时候,nn内部会产生两个文件 edits.log 和 fsimage
edits.log 是记录集群操作的文件,没有操作不产生数据,
fsimage 是系统日志,即便没有操作也会产生日志信息
没到我们设定的条件【1】 ,snn 会将 edits.log 和 fsimage 文件 合并 并持久化到硬盘
1:关于条件,默认edits.log 文件大小超过 64mb 或者 时间超过3600s(1个小时)就会由 snn 执行持久化
持久化完毕之后,nn会将由edits.log 与 fsimage 合并的文件 fsimage 作为新的 fsimage 文件
同时 edits.log 会被保存在nn ,并且重新创建一个edits.log 文件继续记录系统的操作,直到下一次
snn 拉取 edits.log 和 fsimage 文件
我们要知道 snn 是永远不可以能取代 nn 的工作 ,snn相当于一个记录员,他会忠实的记录系统的操作
断电
上面我们说了snn 会把 日志文件 持久化到硬盘 ,所以,当我们遇到意外断电的时候,虽然,在内存的数据丢失了,
当我们服务器,计算机重启的时候,会自动读取储存在磁盘中的日志文件,这样数据就会恢复到断电之前的状态
当然这个机制也并非完美,我们可以设想一种情况,我们知道snn会在 nn 的edits.log文件到达64mb 或 1个小时后 自动持久化
如果,我们在读写非常重要的文件时候断电了,那时候又没有触发自动吃菊花的机制,那我们的数据还是丢失了,当然,之可以通过
一些措施来避免,但是还是暴露了一些问题
重复的断电
当短时间服务器,计算机意外宕机3次 nn就会进入安全模式
安全模式
当我们进入安全模式我们会做一下事情
1 恢复系统的状态(从硬盘读取日志文件)
2 检查所有Datanode的信息
3 对有问题的dn进行修复
关于Datanode 挂掉的问题
假设 我们有三个从节点dn1 dn2 dn3 当上传block时 dn3挂掉了 nn 会从dn1 dn2 继续读取 而原来dn3 的部分
会 由 放置在 dn1 和 dn2 中的备份继续提供 ,如果传输到中途,dn3恢复了,这时nn也不会从dn3读取数据了,
因为 对于nn来说 dn3是一个全新的节点,也就是dn4,而且,dn4中也不具备dn3中的数据