背景

最近在学习大数据hadoop篇, 为了提高学习效率、巩固学习成果,特此记录一下。

心跳机制

心跳机制:datanode每隔一个固定时间会与namenode进行一次通信,以证明自己是alive同时让namenode知道集群中有多少datanode属于存活状态以及各副本与数据块的分布情况

datanode每隔一个固定时间要发送一个心跳数据包给namenode,如果隔了一段时间namenode没有收到datanode的心跳数据包,那么namenode必须按照一个标准来判断datanode是否真正down了

判断标准:10心跳时间(3秒钟)+2检测心跳机制超时时间(5分钟)=630

可以通过kill 掉一个datanode来观察

hadoop并行运算 hadoop运行机制_hadoop并行运算

心跳数据包的内容
1、各datanode自身的状态
2、该datanode节点上保存的所有数据块信息
hdfs启动过程
1、先启namenode进程
2、加载namenode文件夹中的磁盘元数据信息(fsimage+edits_inprogress)
3、在namenode启动完成后,会在namenode上启动一个服务,等待所有的datanode上线后向namenode汇报他们的状态和数据块情况 。
4、datanode上线后,就通过心跳机制把自身所持有的所有块信息全部汇报给namenode
5、只有当namenode等所有的datanode上线并把所有块信息汇报完成之后,最后namenode才能得知整个集群所有文件对应的数据块及副本情况
6、namenode对外提供服务。

安全模式

在HDFS集群部分datanode出现宕机之后或启动在集群过程中有一些datanode因故障无法正常启动,这里hdfs会在后台启动一些服务,进行自我恢复,这时集群会进入一个种安全模式。
安全模式相关的命令

[root@hadoop0 current]# hdfs dfsadmin --help
 -safemode <enter | leave | get | wait>]


补充:当丢失的数据块比例超过0.1%的时候会进行安全模式(怎么得知的)

副本存放策略

定义:决定一个数据块的多个副本(默认是3)到底选取哪些服务器节点进行存储

存放原则
1、任何一个节点上不可能存放两个一样的副本块
2、一个数据块要保存三个完整的副本块,至少需要3个节点

存放策略

1、第一个副本块选取与客户端相同的节点

2、第二个副本块选择跟第一个副本块所在存储节点相邻机架的任意一个节点

3、第三个副本块选择跟第二个副本块所在机架的不同节点

hadoop并行运算 hadoop运行机制_数据块_02

实现存放情况
选择不忙的节点

思考

1、检测心跳超时为5分钟,在哪里可以调整呢?