1)NameNode启动时,会启动一个IPC server服务,
2)DataNode启动后会主动链接NameNode的IP server服务,默认每隔3秒链接一次,也就是心跳。
这个时间能够经过 dfs.heartbeat.interval参数设置,也就是心跳时间。
3)DataNode经过心跳在NameNode注册汇报本身的状态,NameNode经过心跳获取DataNode的状态和下达指令。
4)当NameNode长时间没有收到DataNode的心跳,就认为DataNode挂掉了。
这种心跳机制一样存在于Yarn中ResourceManager和NodeManager中。安全
这个就是Hadoop的Master/Slave架构,NameNode和ResourceManager就是Master,DataNode和NodeManager就是Slave。架构
第一个问题,NameNode元数据怎样保存的?
首先NaomNode的元数据须要放在内存中,由于咱们须要常常访问NameNode节点获取元数据,如果放在磁盘中,那效率会很是低。oop
既然放在内存中,那必要要有一个机制保证内存数据的安全,由于内存中数据一旦断电就丢了,因此内存中的元数据也必需要落地到磁盘,这个就是FstImage.日志
但这样尚未到万事大吉的地步,内存中的元数据随时可能更新,这时是否要同步更新FsImage呢?若是咱们更新,必然会致使效率底下,若是咱们不更新,那内存中的元数据和FsImage就会不一致,一旦出现NameNode节点断电之类的状况,就会出现部分数据丢失。server
那么咱们引入这样一个记录文件Edits,只要内存中的元数据增长或者更新,那么就同步把这个操做记录追加到Edits,这样即使NameNode断电,咱们还能够根据Edits和FsImage来恢复元数据。内存
新的问题又来了,内存中的元数据但是常常发生变化的,那不断的追加记录到Edits中,那必然会致使这个文件愈来愈大,那么将来咱们须要恢复元数据时,须要花费的时间也必然大大增长,影响咱们效率,因此咱们须要按期对FsImage和Edits进行合并。同步
好了,任务来了,定义把FsImage和Edits进行合并,那这个任务谁来作呢?NameNode能够吗?固然能够,但这会致使NameNode任务太重,影响效率,那为了保证效率,就把这个任务交给另一我的来作,那就是Secondary NameNode。工作流
从这里能够明白Secondary NameNode并非NameNode的热备,当NameNode挂了的时候,它并不能替代NameNode工做,但它能够用帮助恢复NameNode。it
具体NameNode和Secondary NameNode的工做流程以下
阶段1:
1)首次启动集群后,咱们须要对NameNode格式化,这时会建立FsImage和Edits,这些文件就在$HADOOP_HOME/data/name/current下.
以后启动,直接加载Edits和FsImage到内存中。
2)Client也就是客户端对元数据进行增删改的操做请求。
3)NameNode先记录操做,更新日志,而后在内存中对元数据进行增删改的操做。io
阶段2:
SecondaryNameNode执行合并的操做,叫CheckPoint,这个操做有两个触发条件。
第一个,就是间隔时间到,默认是1小时,这个能够调整。
第二个,就是SecondaryNameNode会一分钟检查一次操做次数,当操做数达到设置的上限,就会触发。
1)首先SecondaryNameNode会询问NameNode是否须要执行CheckPoint
2)拿到NameNode的返回结果,就开始请求执行CheckPoint
3)NameNode滚动更新正在的Edits日志,将滚动前的Edits和FsImage文件拷贝到SecondaryNameNode上。
4)SecondaryNameNode将两个文件加载到内存进行合并,生成新的fsImage.chkpoint,拷贝到NameNode上。
5)NameNode将fsimage.chkpoint命名为fsimage。
固然在有了HA后,也不多使用SecondaryName了。
前面讲了,当NameNode启动后,首先是将FsImage和Edits文件加入内存,这个是为保证获得最新的元数据,这个其实也是合并,以后生成一个新的FsImage和一个空白的Edits,而后启动IPC Server服务,监听DataNode的请求,在这个期间,NameNode的文件系统对外界处于只读状态,也就是安全模式。
以后DataNode启动,在各个DataNode经过NameNode的IPCServer 发送他们最新的块列表信息。
当达到dfs.replication.min 设定的值,NameNode会退出安全模式,这个参数设置的值就是最小副本条件,指的是文件系统中块知足的最小副本级别。