zoukankan      html  css  js  c++  java
  • NodeManager启动流程与服务

    本文介绍了NodeManager的启动流程与服务.

    NodeManager主流程

          在main方法中new一个 NodeManager, 然后初始化并启动.

           这里主要看initAndStartNodeManager方法.

           首先是增加一个shutDownHook, 即CompositeServiceShutdownHook, 它的目的是为了在NodeManager crash的时候停止compositeService (它维护了nodeManager上所有的service列表).

    然后初始化, init(conf):

    1. 如果配置了安全选项, 则需初始化containerTokenSecretManager.

    2. 初始化ContainerExecutor, 顾名思义, ContainerExecutor封装了nodeManager对Container操作的各种方法, 包括启动container, 查询指定id的container是否活着,等操作. 根据配置yarn.nodemanager.container-executor.class决定ContainerExecutor的实例, 默认为DefaultContainerExecutor.

    3. New DeletionService, 用于删除用户文件 …..

    4. New AsyncDispatcher, 和RM的AsyncDispatcher一样. 异步分发器.

    5. New NodeHealthCheckerService, 一个服务, 可以通过此服务查询node是否健康, 当前node的健康状态包括nodeHealthScriptRunner.isHealthy和dirsHandler.areDisksHealthy

    6. 创建NodeStatusUpdater线程, 负责向RM注册和发送心跳(更新状态). 这里使用ResourceTracker协议向RM通信, 底层为YarnRPC. ResourceTracker接口提供了两个方法; 提供注册和心跳功能.

    clip_image002

    7. NodeResourceMonitor服务, 继承于AbstractService, 没有自己定义方法. 监控node的资源(即资源是否可用, 四种状态, stopped, inited, notinited, started)

    8. 创建ContainerManagerImpl服务, 管理container, 启动20个RPC处理线程, 使用ContainerManager协议, ContainerManager协议为APP向NodeManager通信的协议, 提供了三个方法:

    clip_image004

    注意, 这里获取container的状态包括NEW, RUNNING, COMPLETE. 而container的进度信息其实是有container直接向AM汇报的.

    9. 创建webServer, 启动NodeManager的web服务. 通过yarn.nodemanagerwebapp.address设置地址, 默认端口为8042.

    10. 初始化Metrics

    转载请注明出处(http://www.cnblogs.com/shenh062326/archive/2012/11/24/NodeManager.html)

  • 相关阅读:
    Java代理模式
    PHP7.3.0+弃用FILTER_FLAG_SCHEME_REQUIRED的解决办法
    《PHP7底层设计与源码实现》学习笔记1——PHP7的新特性和源码结构
    《MySQL实战45讲》学习笔记2——MySQL的日志系统
    PHP反射学习总结
    依赖注入模式中,为什么用对象而不是用数组传递?
    记MySQL的一次查询经历
    数据结构与算法之PHP递归函数
    PHP的json_encode()函数与JSON对象
    Linux系统如何查看版本信息
  • 原文地址:https://www.cnblogs.com/shenh062326/p/NodeManager.html
Copyright © 2011-2022 走看看