节点健康监测是NodeManager自带的健康状况诊断机制,通过该机制,NodeManager可时刻掌握自己的健康状况,并及时汇报给ResourceManager。而ResourceManager则根据每个NodeManager的健康状况适当调整分配的任务数目。当NodeManager认为自己的健康状况“欠佳”时,可通知ResourceManager不再为之分配新任务,待健康状况好转时,再分配任务,该机制不仅可帮助及时发现存在的问题的NodeManager,避免不必要的任务分配,也可以用于动态升级。
1、自定义shell脚本
NodeManager上有专门一个服务判断所在节点的健康状况,该服务通过两种策略判断节点健康状况,第一种是通过管理员自定义的shell脚本,Nodemanager上专门有一个周期性任务执行该脚本,一旦该脚本输出以“ERROR” 开头的字符串,则认为节点处于不健康状态,另一种是判断磁盘好坏,Nodemanager上专门有一个周期性任务检测磁盘的好坏,如果坏磁盘数目达到一定的比例,则认为节点处于不健康状态。
NodeHealthScriptRunner服务主要工作是周期性执行节点健康状况检测脚本,该服务运行管理员配置一个“健康检测脚本”以检查节点健康状况,且管理员可在该脚本中添加任何检查语句作为节点是否健康运行的依据。如果脚本检测到该节点处于不健康状态,他需要在标准输出中打印一条以字符串“ERROR”开头的输出语句,NodeHealthScriptRunner服务周期性调用健康检测脚本并检查其输出,一旦发现脚本输出是以“ERROR”开头的字符串,则认为节点处于不健康状态,进而将其标注为“unhealthy”并通过心跳告诉ResourceManagerÿ