namenode 如何判断datanode节点是否宕机的技术细节

1、namenode 如何判断datanode节点是否宕机?
先决条件:
datanode每隔一段时间像namenode汇报,汇报的信息有两点
(1)自身datanode的状态信息;
(2)自身datanode所持有的所有的数据块的信息
如果namenode连续十次没有收到datanode的汇报,那么namenode就会认为该datanode存在宕机的可能。
datanode启动以后会专门启动一个进程负责给namenode发送心跳数据包,如果datanode没有问题,仅仅只是发送信息数据包的进程挂了,namenode会发送命令向这个datanode进行确认
查看这个发送心跳包的进程是否还能正常运行,namenode会向datanode确认两遍,每五分钟确认一次。如果两次都没有返回结果,那么namenode就会认为datanode已经宕机了。
最终namenode判断一个datanode死亡的时间计算公式:
timeout = 10 * 心跳间隔时间 + 2 * 检查一次消耗的时间
心跳间隔时间
配置参数:dfs.heartbeat.interval
默认值:3s,单位s
检查一次消耗的时间
配置参数:dfs.namenode.heartbeat.recheck-interval
默认值:    300000,单位ms

2、数据块读写操作的一些配置项
(1)配置参数:dfs.blocksize 
参数说明:客户端数据分块的大小
默认值:134217728(128M);单位:字节
(2)dfs.client-write-packet-size
参数说明:客户端写入数据时packet数据包的大小
默认值:65536(64K),单位字节
(3)dfs.bytes-per-checksum
参数说明:chunk(写入数据时最小的一个单位),数据校验的粒度
默认值:512字节
注:事实上一个chunk还包含4B的校验值,因而chunk写入packet时是516B;数据与检验值的比值为128:1,所以对于一个128M的block会有一个1M的校验文件与之对应;

3、集群数据损坏以后,自动删除时长
配置项:dfs.blockreport.intervalMsec
默认值:21600000(36分钟),单位:ms

4、元数据checkPount
在分布式或者伪分布集群中,每隔一段时间,会由 secondary namenode 将 namenode 上积累的所有 edits 和一个最新的 fsimage 下载到本地,并加载到内存进行 merge(这个过程称为 checkpoint)
dfs.namenode.checkpoint.check.period=60 ##检查触发条件是否满足的频率,60 秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
##以上两个参数做 checkpoint 操作时,secondary namenode 的本地工作目录
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}
dfs.namenode.checkpoint.max-retries=3 ##最大重试次数
dfs.namenode.checkpoint.period=3600 ##两次 checkpoint 之间的时间间隔 3600 秒
dfs.namenode.checkpoint.txns=1000000 ##两次 checkpoint 之间最大的操作记录

5、jvm重用
配置参数:mapred.job.reuse.jvm.num.tasks
参数解释:一个jvm内部跑多少个task,默认是1,可以设置为多个。这个参数在2.9.2版本中未找到。

你可能感兴趣的:(hadoop)