NodeManager专区-节点健康状况监测

节点健康监测是NodeManager自带的健康状况诊断机制,通过该机制,NodeManager可时刻掌握自己的健康状况,并及时汇报给ResourceManager。而ResourceManager则根据每个NodeManager的健康状况适当调整分配的任务数目。当NodeManager认为自己的健康状况“欠佳”时,可通知ResourceManager不再为之分配新任务,待健康状况好转时,再分配任务,该机制不仅可帮助及时发现存在的问题的NodeManager,避免不必要的任务分配,也可以用于动态升级。

1、自定义shell脚本

       NodeManager上有专门一个服务判断所在节点的健康状况,该服务通过两种策略判断节点健康状况,第一种是通过管理员自定义的shell脚本,Nodemanager上专门有一个周期性任务执行该脚本,一旦该脚本输出以“ERROR” 开头的字符串,则认为节点处于不健康状态,另一种是判断磁盘好坏,Nodemanager上专门有一个周期性任务检测磁盘的好坏,如果坏磁盘数目达到一定的比例,则认为节点处于不健康状态。

       NodeHealthScriptRunner服务主要工作是周期性执行节点健康状况检测脚本,该服务运行管理员配置一个“健康检测脚本”以检查节点健康状况,且管理员可在该脚本中添加任何检查语句作为节点是否健康运行的依据。如果脚本检测到该节点处于不健康状态,他需要在标准输出中打印一条以字符串“ERROR”开头的输出语句,NodeHealthScriptRunner服务周期性调用健康检测脚本并检查其输出,一旦发现脚本输出是以“ERROR”开头的字符串,则认为节点处于不健康状态,进而将其标注为“unhealthy”并通过心跳告诉ResourceManager,而ResourceManager得知节点状态变为“unhealthy”后,会将其加入黑名单,此后不再为它分配新任务,需要注意的是,只要Nodemanager服务还是活着的,该线程就会一直运行该脚本,一旦发现节点又变成了“Healthy”,ResourceManager会立刻将其从黑名单中移除,从而又可以为它分配任务,通过引入该机制,有如下好处

  • **可作为节点负载的反馈。**当前YARN仅对CPU和内存两种资源进行了隔离,其他资源,比如网络和磁盘IO等,尚未有任何隔离措施,这使得不同任务之间扔会有干扰,而健康脚本检测的方式可从一定程度上缓解该问题,比如,可让健康检测脚本检查网络、磁盘、文件系统等运行状况,一旦发现特殊情况,比如网络拥塞、磁盘空间不足或者文件系统出现问题,可将健康状况变为“unhealthy”,暂时不接收新的任务,待它们恢复正常后再继续接收新任务。
  • **人为暂时维护NodeManager。**如果发现Nodemanager所在节点出现故障,可通过控制脚本输出暂时让该NodeManager停止接收新任务以便进行维护,待维护完成后,修改脚本输出以让NodeManager继续接收新任务。

例如内存的使用率达到了 95% 以上,则认为此节点处于不健康的状况

#!/bin/bash

mem_usage=$(echo `free -m | awk '/^Mem/ {printf("%u", 100*$3/$2);}'`)

echo "Usage is $mem_usage%"

if [ $mem_usage -ge 95 ] then

  echo 'ERROR: Memory Usage is greater than 95%'

else

  echo 'NORMAL: Memory Usage is less than 95%'

fi

       NodeHealthScriptRunner服务包含四个可配置参数,需要在yarn-site.xml里面配置

名称 含义
yarn.nodemanager.health-checker.script.path 健康检测脚本所在的绝对路径,如果该值为空,则不会启动该线程
yarn.nodemanager.health-checker.interval-ms 健康检测脚本调用频率,默认是600000(10分钟)
yarn.nodemanager.health-checker.script.timeout-ms 如果健康检测脚本在一定时间内没有响应,则NodeHealthScriptRunner服务会将节点标注为unhealthy,默认是1200000(20分钟)
yarn.nodemanager.health-checker.script-opts 监控脚本在输入参数,如果有多个参数则用逗号隔开

检测磁盘损坏数目

       除了健康状况的检测机制外,YARN还提供了另外一种判断NodeManager是否健康的机制;检测磁盘损坏数目,管理员可通过参数yarn.nodemanager.disk-health-checker.enable设置是否启用该功能,默认情况下是开启的,该机制是由LocalDirsHanderService服务实现的,它周期性任务检测Nodemanager本地磁盘的好坏,一旦发现正常磁盘的比例低于一定的比例,则认为节点处于不健康状况,便通过心跳告诉ResourceManager,从而不再接收到新的任务

       管理配置YARN时,会设置Nodemanager的本地可用目录列表(由参数yarn.nodemanager.local-dirs设置,通常用于存储应用程序中间结果,比如Mapreduce作业中Map Task的中间输出结果)和日志存放目录列表(由参赛yarn.nodemanager.log-dirs设置)这些目录的可用性直接决定着Nodemanager的可用性,因此,Nodemanager作为节点的代理和管理者。应该负责检测这两类目录列表的可用性,并及时将不可用目录剔除掉。LocalDirsHandlerService服务中专门有一个定时任务周期性检测这些目录好坏,一旦发现正常磁盘的比例低于yarn.nodemanager.disk-health-checker.min-healthy-disks(默认是0.25),就认为该节点处于“不健康”的状态,此后ResourceManager不再为它分配新任务。
       NodeManager判断一个目录还坏的方法是,如果一个目录具有读、写和执行权限,则认为它是正常的,否则将被加入坏磁盘列表,此后不再使用。

更多内容关注公众号"数据专场"
NodeManager专区-节点健康状况监测_第1张图片

你可能感兴趣的:(hadoop)