ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

NodeManager节点自身健康状态检测机制

2021-04-02 13:51:17  阅读:281  来源: 互联网

标签:检测 yarn 节点 健康 nodemanager NodeManager


NodeManager节点自身健康状态检测机制

过往记忆 过往记忆大数据
本文原文:https://www.iteblog.com/archives/2168.html,如微信阅读格式错乱,请点击下面 阅读原文 进行阅读。

每个 NodeManager 节点内置提供了检测自身健康状态的机制(详情参见 NodeHealthCheckerService);通过这种机制,NodeManager 会将诊断出来的监控状态通过心跳机制汇报给 ResourceManager,然后ResourceManager 端会通过 RMNodeEventType.STATUS_UPDATE 更新 NodeManager 的状态;如果此时的 NodeManager 节点不健康,那么 ResourceManager 将会把 NodeManager 状态变为 NodeState.UNHEALTHY 。关于 NodeManager 的状态之间的转移请参见NodeManager生命周期介绍。这种内置的健康检测机制主要包括以下两种:

  • 健康状况检测脚本
  • 本地目录健康检测

    健康状况检测脚本

每个 NodeManager 上都有一个名为 NodeHealthScriptRunner 的类,其会启动一个名为 NodeHealthMonitor-Timer 的 Timer 定期执行(默认每个十分钟实行一次,由参 yarn.nodemanager.health-checker.interval-ms 指定)用户编写的用于检测 NodeManager 健康状态的脚本,这个脚本是通过参数 yarn.nodemanager.health-checker.script.path 指定的。一旦发现以下几种结果则认为节点处于不健康状态:

  • 脚本输出包含以"ERROR"开头的字符串,不顾是一个还是多个都算
  • 执行脚本的时候出现超时
  • 执行脚本出现异常
    如果执行脚本出现了 ExitCodeException 异常,并不认为 NodeManager 节点健康出现异常,因为我们的脚本可能编写错误。NodeHealthScriptRunner 类涉及到的参数如下:

  • yarn.nodemanager.health-checker.script.path:这个就是 Hadoop 集群管理员编写的用于健康检测的脚本路径,如果这个属性没有设置, NodeManager 则不会启动 NodeHealthScriptRunner。
  • yarn.nodemanager.health-checker.interval-ms:每个多久执行健康脚本,默认是10分钟。
  • yarn.nodemanager.health-checker.script.timeout-ms:执行健康检测脚本超过了这个属性配置的时间,则认为节点不健康。默认值是20分钟。
  • yarn.nodemanager.health-checker.script.opts:健康检测脚本的输入参数,如果有多个请使用空格分割。
    健康检测脚本这种机制有点好处:目前的 YARN 资源管理主要是内存核CPU,其他的比如磁盘使用、系统负载、网络等并没有监控到,我们可以使用这种机制来主动告诉 ResourceManager 自身的监控状态。

下面是一个简单的健康检测的脚本(假设脚本的保存路径为/user/iteblog/check_memory_usage.sh),如果内存的使用率达到了 95% 以上,则认为此节点处于不健康的状况:
NodeManager节点自身健康状态检测机制
然后我们可以在 NodeManager 进行如下配置:

NodeManager节点自身健康状态检测机制

本地目录健康检测

除了管理员提供的健康检测脚本之外,NodeManager 还提供了检测磁盘好坏的机制。检测的磁盘目录主要是 yarn.nodemanager.local-dirs 和 yarn.nodemanager.log-dirs 参数指定的目录,这两个目录分别用于存储应用程序运行的中间结果,比如MapReduce作业中Map Task的中间输出结果)和日志文件存放目录列表。这两个参数都可以配置多个目录,多个目录之间使用逗号分隔。如果这两个参数配置的目录不可用的比例达到一定的设置,则认为该节点不健康。某个目录可不可用的定义是:运行 NodeManager 节点的进程是否对这个目录可读、可写、可执行。如果这些条件都满足,这个目录则健康,否则该目录就被放入 failedDirs 列表里面。本地目录健康检测主要涉及到以下几个参数:

  • yarn.nodemanager.disk-health-checker.interval-ms:本地目录健康检测线程执行的频率,默认值为2分钟;
  • yarn.nodemanager.disk-health-checker.enable:是否启用本地目录健康检测,默认值是启用;
  • yarn.nodemanager.disk-health-checker.min-healthy-disks:正常目录数目相对于总目录总数的比例,低于这个值则认为此节点处于不正常状态,默认值为0.25。
    以上两种检测机制都会随着 NodeManager 节点启动而运行,并且检测到的状态会随心跳信息发送到 ResourceManager 端,然后 ResourceManager 端会根据相关的信息得到当前节点的可用情况,一旦发现这个节点不健康,则会标记此节点的状态为 NodeState.UNHEALTHY ,此后将不会忘这个节点分配任务,直到该节点状态正常。

标签:检测,yarn,节点,健康,nodemanager,NodeManager
来源: https://blog.51cto.com/15127589/2680627

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有