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版本中未找到。