本文翻译自:
http://hortonworks.com/blog/apache-hadoop-yarn-nodemanager/
一、NodeManager 简介
NodeManager 是 Yarn 每个节点的代理,在hadoop集群中负责计算个字的节点。这包含同ResourceManager(RM)保持日期同步,监督container的生命周期,监控container资源的使用情况,跟踪node 心跳,日志管理和一些可以被不同YRAN应用程序使用的辅助服务。
二、NodeManager 组件
NodeManager 架构图
1、NodeStatusUpdater
启动时,该组件在RM注册并发送节点上可用的资源。随后,NM-RM进行通讯更新container状态 ,比如节点新容器启动,容器执行完等等。
此外,RM将发送信号给NodeStatusUpdater 将潜在的已经运行的container 杀掉。(假死的container??)
2、ContainerManager
该组件是NodeManager 的核心。有以下几个子组件组成,每个子组件都承担起管理容器运行在节点上的一系列子功能。
(A)RPC server: ContainerManager 接收来自 Application Masters(AMs) 的启动新容器的请求,或者停止运行的容器。这部分的工作由ContainerTokenSecretManager (下文详述)对所有请求进行授权。在此节点上运行的容器上进行的所有操作 将写入到auditlog(可以被安全工具做后期处理)。
(B)资源本地化服务(ResourceLocalizationService) : 负责安全的下载和组织容器需要的多种类型的文件资源。它最大限度的将文件分配到可用的硬盘。并强制文件下载的访问限制和对资源采取适当的使用限制
(C)容器发布器(Containers Launcher ):为尽可能快的预备和发布容器而维持一个线程池。同时当接受到来自RM或者AMs的请求时清除容器的进程。
(D)辅助服务(Aux Services):NM 通过辅助服务提供一个可扩展功能的配置。这允许每个节点自定义服务(比如特殊的框架请求),NM的rest服务还处于沙箱阶段。这些服务必须在NM启动前配置。在节点上的应用程序的第一个容器启动和应用程序认为容器运行结束时,辅助服务都将被通知到。
(E)容器监控器(ContainersMonitor): 在一个容器启动后,该组件开始监测容器运行时的资源使用。进行强制隔离和公平分配资源例如内存,每个容器都会从RM分配到一定量的这类资源。监控器不断的监控每个容器的使用,如果一个容器超过它限额时,将该容器标志为将被杀掉。这样做是为了保护在同一节点上运行良好的容器免遭运行不良的容器的影响。
(F)LogHandler: 一个插件化的组件,可选择将容器的日志本地化到磁盘或者压缩上传到文件系统。
3、容器执行器(ContainerExecutor): 根据容器的需要在操作系统之下安全的放置文件和文件夹,然后以安全的方式启动和清除与容器的进程。
4、NodeHealthCheckerService: 通过运行一个配置的脚本,提供检查节点的健康状态的功能,同时也通过创建临时文件的特殊方式来监控硬盘的健康状态。系统的任何健康状态的改变将通知到NodeStatusUpdater,进而由它传递给RM.
5、Security
(A)应用程序访问权限管理(ApplicationACLsManager) :NM需要对用户面对的APIs 进行访问限制,比如 在Web UI容器的日志展示只有授权的用户才能获取。这个组件为每个应用程序维护一个ACLs 列表,并负责执行当接受到类似的请求。
(B)容器令牌密钥管理(ContainerToken SecretManager):验证各种各样的请求确保进入的操作
6、WebServer
暴露应用程序列表,在指定时间节点上的运行容器,节点健康状态的相关信息,容器的日志等。
三、关键功能聚焦
1、Container Launch
为促进容器的启动,作为容器的技术规范的一部分,NM期望收到容器运行时间的详细信息。这些包括容器的命令行,环境变量,容器或者任何有安全令牌的一系列的(文件)资源请求。
当接收到容器启动请求,NM先验证请求,如果请求是权限可用的,授权用户执行,分配正确的资源等等。NM接下来做一系列步骤进行启动容器:
A、本地拷贝所有被创建的指定资源(Distributed Cache)
B、隔离为容器创建的工作目录,并将该目录的本地资源标志为可用。
C、使用启动环境和命令行进行启动真实的容器
2、日志聚合(Log Aggregation)
操作用户日志是过去Hadoop的一大痛点,NM 对日志的地址管理问题提供了可选项配置,可在应用程序执行完后移动到文件系(HDFS等)
3、How MapReduce shuffle takes advantage of NM’s Auxiliary-sevices
Shufflte功能要求运行MR 程序将作为一个负责功能实现(Auxiliary Service)。这个服务用Netty web server 启动,知道如何去处理来自Reduce 任务的shuffle 请求。只要是安全请求,MR AM 为shuffle指定服务ID。NM为AM提供shuffle服务端口。
四、总结
在YARN中,Nodemanager 主要限制在管理抽象的容器。例如 只关心进程和该容器相匹配,不关心容器与自身每个应用程序状态管理,例如Mapreduce 任务。它同时也不区分map slots 和reduce slots。由于有上述模块的明显职责分离,NM更容易扩展,代码也跟容易维护。