【十八掌●内功篇】第六掌:YARN之NodeManager

这一篇博文是【大数据技术●降龙十八掌】系列文章的其中一篇,点击查看目录:这里写图片描述大数据技术●降龙十八掌


系列文章:
【十八掌●内功篇】第六掌:YARN之架构和原理
【十八掌●内功篇】第六掌:YARN之ResourceManager
【十八掌●内功篇】第六掌:YARN之NodeManager
【十八掌●内功篇】第六掌:YARN之ApplicationMaster
【十八掌●内功篇】第六掌:YARN之YARN资源调度器

1、 NM的职能

NM是单个节点上的代理,功能包括与ResourceManager保持通讯、管理Container的生命周期、监控Container的资源使用、追踪节点健康状态、管理日志。

2、 NM内部结构

【十八掌●内功篇】第六掌:YARN之NodeManager_第1张图片

模块 说明
NodeStatusUpdater NodeStatusUpdater是NM和RM通讯的唯一通道。NM启动时,该组件负责向RM注册、汇报节点总的可用资源。该组件周期性地汇报各个Container的状态,接收RM返回的待清理的Container列表等。
ContainerManager ContainerManager是NM最核心的模块。
RPC Server 是AM和NM通讯的唯一通道,接收AM请求,启动或者停止Container
ResourceLocalizationService 负责Container所需资源的本地化,下载文件资源,尽量分摊到各个磁盘。
ContainersLauncher 维护一个线程池并行操作Container。
AuxServices NM附属服务。
ContainersMonitor ContainersMonitor负责监控Container的资源使用量。
LogHandler 用户可以通过LogHandler控制Container日志保存方式。
ContainerEventDispatcher Container事件调度器,负责将ContainerEvent类型的事件调度给对应的Container的状态机
ApplicationEventDispatcher Application事件调度器,负责将ApplicationEvent类型的事件调度给对应的Application状态机。
ContainerExecutor ContainerExecutor可与底层操作系统交互,安全存放Container需要的文件和目录,启动和清除Container对应的进程。
NodeHealthCheckerServiceNodeHealthCheckerService通过周期性运行一个脚本和写磁盘检测节点的健康状况,并通知RM。NodeHealthScriptRunner:运行脚本检测LocalDirsHandlerService:写磁盘文件检测
DeletionService NM将文件删除功能化,DeletionService异步删除文件,避免同步删除文件带来的性能开销。
Security 安全模块分为两部分:ApplicationACLManager确保访问NM的用户是合法的。ContainerTokenSecreManager确保用户请求的资源被RM授权过
WebServer Web UI向用户展示

3、 节点健康状态检测

NodeManager自带了健康状况诊断机制,NM将自身健康状态报告给RM,RM根据NM健康状态动态分配任务数量。这个机制可以避免不必要的任务分配,还可以用于节点升级。

(1) 自定义脚本检测

NodeHealthScriptRunner服务主要用于周期性地执行节点健康检测脚本,这个脚本可以由管理员自定义,如果检测不健康,脚本要打印一条以ERROR开头的语句。
作用如下:

  • 可作为节点负载的反馈:因为当前YARN只对CPU和内存进行了隔离,其他资源无法隔离,可以通过自定义脚本来检测来解决问题。
  • 维护节点:可以通过修改脚本,让他输出ERROR来停止给当前节点分配任务,维护完成后继续接受任务。

(2) 检测磁盘损坏数目

检测磁盘损坏数目可以通过参数yarn.nodemanager.disk-health-checker.enable设置是否启用,默认是启用的。LocalDirsHandlerService服务周期性的实现这个检测。

4、 分布式缓存机制

YARN中将用户应用程序执行时所需要的文件资源下载到各个节点上以便后续执行任务。分布式缓存不是将文件缓存到各个节点的内存而是磁盘,缓存资源的动作是用时触发。

5、 目录结构管理

NodeManager上的目录可以分为两种:数据目录和日志目录。

(1) 数据目录

数据目录用来存放执行Container所需的数据和运行过程中产生的临时数据,由参数yarn.nodemanager.local-dirs执行。

(2) 日志目录

日志目录则用于存放Container运行时输出日志,由参数yarn.nodemanager.log-dirs指定。

6、 状态机管理

NodeManager维护着三类状态机,分别是Application、Container、LocalizedResource。

(1) Application状态机

RM上有一个整个集群上Application信息列表,而一个NM上也有一个处在它自己节点的Application的信息列表,NodeManager上的Application状态机维护着NodeManager上Application的状态。
这有利于对一个NM节点上的同一个Application所有的Container进行统一管理。

(2) Container状态机

Container状态机维护NodeManager上所有Container的生命周期。

(3) LocalizedResource状态机

LocalizedResource状态是NodeManager上用于维护一个资源生命周期的数据结构。资源包括文件、JAR包等。

7、 Container生命周期

NodeManager中的ContainerManager负责接收AM发来的请求以启动Container,Container的启动过程分三个阶段:资源本地化、启动并运行Container、资源清理。

(1) 资源本地化

资源本地化主要是进行分布是缓存工作,分为应用程序初始化和Container本地化。

(2) 运行Container

Container运行是由ContainerLauncher服务完成启动后,调用ContainerExecutor来进行的。主要流程为:将待运行的Container所需要的环境变量和运行命令写到Shell脚本launch_container.sh中,并将启动该脚本的命令写入default_container_executor.sh中,然后通过运行该脚本启动container。

(3) 资源清理

container清理是资源本地化的逆过程,是指当container运行完成后,NodeManager来回收资源。

8、 资源隔离

资源隔离是指对不同的任务提供可独立使用的计算资源以避免他们相互干扰。
YARN对内存资源的隔离采用了两种可选方案:线程监控方案和基于轻量级资源隔离技术Cgroups的方案,默认情况下YARN采用的是进程监控方案来限制内存使用。
YARN对于CPU资源采用了Cgroups方案。

(1) Cgroups

Cgroups是Linux内核提供的一种可以限制、记录、隔离进程组所使用的的物理资源的机制,物理资源包括:CPU、内存、IO等。

Cgroups提供了以下功能:

  • 限制进程组的使用量:可以设置一个资源上线。
  • 进程组的优先级控制
  • 对进程组使用的资源量进行记账
  • 进程组控制

(2) 内存资源隔离

(3) CPU资源隔离


这一篇博文是【大数据技术●降龙十八掌】系列文章的其中一篇,点击查看目录:这里写图片描述大数据技术●降龙十八掌

你可能感兴趣的:(大数据技术,大数据技术)