Yarn源代码分析之旅---NodeManager---健康检查

来源:互联网 发布:德州seo 编辑:程序博客网 时间:2024/04/29 00:26

概述

           在NodeManager的初始化的时候,我们会看到如下代码:
            nodeHealthChecker = new NodeHealthCheckerService();
            addService(nodeHealthChecker);
  这段代码为NM添加了一个服务,用于通过周期性的运行一个自定义脚本(由组件NodeHealthScriptRunner完成)和向磁盘写文件(由服务LocalDirsHandlerService完成)检查节点的健康状态。然后并通过ResourceTrackerProtocol向RM报告自己的健康状况。NodeHealthCheckerService本身并不提供有用的功能,内部主要靠NodeHealthScriptRunner以及LocalDirsHandlerService完成。

NodeHealthScriptRunner

          配置项yarn.nodemanager.health-checker.script.path的值,是一个可执行脚本的绝对地址, 如果此配置项没有值,则NodeHealthScriptRunner服务不会被添加并启动;如果有值,并且文件真实存在而且有权限能够访问的话,此服务会被添加到服务列表。服务初始化的时候,会初始化脚本的地址,执行的时间间隔,超时时间以及运行时的参数,这些都是定义在配置文件yarn-site.xml中的,最后定义了一个Timer:NodeHealthMonitorExecutor来具体执行脚本。
         服务启动后,会定期通过ShellCommandExecutor来运行脚本,然后得到脚本的输出,如果发现是ERROR开头的,则说明NM现在处于不健康的状态(还有一些别的状态,在此不一一说明),如果是OK开头,则说明NM是健康的。
         NM每次跟RM心跳的时候,都会得到当前的健康状态信息,然后返回给RM,如果RM收到了不健康的状态,则会把NM放入黑名单,否则,会放入白名单。

LocalDirsHandlerService

         服务初始化时,会初始化时间间隔,MonitoringTimerTask,正常磁盘比例等等信息,以及两个重要的目录,本地可用目录列表以及日志存放目录列表,这些目录直接决定只NM是否可用。所以NM作为节点的代理和管理者,应该负责检测这两类目录列表的可用性。MonitoringTimerTask启动后,会定期检查这两类目录的可用性,返回健康状态(比较磁盘比例),如果不可用,则删除不能用的目录。判断条件是具有读,写,执行权限。
0 0
原创粉丝点击