-
NodeStatusUpdate:NM和RM通信的唯一通道,NM启动时,该组件和RM注册,汇报节点上的总可用资源;之后,该组件周期性和RM通信,汇报各个Container的状态更新,包括节点上正运行的Container、已完成的Container等信息,同时RM会为之返回待清理的Container列表、待清理应用程序列表、诊断信息、各种Token。
-
ContainerManager:ContainerManager由多个子组件构成,协同管理运行再该节点上的所有Container。
- RPC server:AM和NM通信的唯一通道,ContainerManager从各个AM上接收RPC请求以启动新的Container或者停止Container。
- ResourceLocalizationService:负责Container所需资源的本地化,按照描述从HDFS上下载Container所需的文件资源阿,并尽量将它们分摊到各个磁盘上以防止出现访问热点。
- ContainersLauncher:维护了一个线程池以并行完成Container相关 *** 作,比如启动或者杀死Container,启动Container由AM发起,杀死Container可能是AM或者RM
- AuxService:NM允许用户通过配置附属服务的方式扩展自己的功能。
- ContainersMonitor:监控Container的资源使用量
- LogHandler:可插拔组件,控制Container日志的保存方式
- ContainerEventDispatcher:Container事件调度器,负责将ContainerEvent类型的事件调度给对应Container的状态机ContainerImpl。
- ApplicationEventDispatcher:Application事件调度器
-
Container Executor:可与底层 *** 作系统交互,安全存放Container需要的文件和目录,以安全的方式启动和清除Container对应的进程。YARN提供了DefaultContainerExecutor和LinuxContainerExecutor两种方式。
-
NodeHealthCheckerService:通过周期性地运行一个自定义脚本和向磁盘写文件检查节点的健康状况,通过NodeStatusUpdate传递给RM,一旦RM发现一个节点处于不健康状态,就加入黑名单,直到再次转为健康状态。
-
DeletionService:NM将文件删除功能服务化,提供一个专门的文件删除服务异步删除失效文件,避免同步删除文件带来的性能开销
-
Security:安全模块
-
WebServer:web界面
NM中组件之间的交互是通过事件的,使得多个组件可以异步并发完成各自的功能。
基本职能(1)ResourceTrackerProtocol协议
NM通过该协议向RM注册、汇报节点健康状况和Container运行状态,并领取RM下达的命令,包括重新初始化、清理Container占用资源等。NM和RM之间也是pull模型,NM主动向RM发起请求,领取命令。
两个主要的RPC函数:
-
registerNodeManager:
- NM启动时通过该函数向RM注册,注册信息包括①httpPort:NM对外提供的HTTP端口号②nodeId:NM所在host和对外的RPC端口号③totalResource:NM所在节点总的可分配资源。
- RM通过该函数向NM返回一个RegisterNodeManagerResponse类型的对象,包括①MasterKey:新生成的Container Token和Node Token的MasterKey②NodeAction:RM向该NM返回的下一步 *** 作,包括正常、重新同步信息、停止运行③rmIdentifier:RM的标识符,NM通过该标识符判断AM发送的Container来自原始的还是新启动的RM(用于RM重启恢复或者HA场景)④diagnosticsMessage:NM注册失败时,将收到一段诊断信息,告知具体的失败原因
-
nodeHeartbeat:NM启动后,定期通过该函数向RM汇报container运行信息和节点健康状况并领取新的命令。
(2)ContainerManagementProtocol协议
AM通过该RPC协议向NM发起针对Container的相关 *** 作,包括启动Container、杀死Container、获取Container执行状态等。
NM和AM之间是”push模型“,AM将Container相关 *** 作第一时间告诉NodeManager,相比于”pull模型“,大大降低时间延迟。
三个函数:
①startContainer:AM要求NM启动一个Container,该函数有一个StartContainerRequest类型的参数,封装了Container启动所需的本地资源、环境变量、执行命令、Token等信息。
②stopContainer:AM要求NM杀死一个Container,该函数有一个StopContainerRequest类型的参数,用于指定待杀死的Container ID。
③geiContainerStatus:AM获取一个Container的运行状态。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)