NodeManger分析
NM主要保持与RM的同步,管理该节点containers的生命周期,监控每个container的资源使用率,跟踪节点状态,日志管理和各种应用服务的辅助服务。 总体架构
NodeStatusUpdater
在NM启动阶段,NodeStatusUpdater负责向RM注册,将该可用资源发送给RM。在运行节点提供该节点containers的状态给RM。RM还会给NodeStatusUpdater发送消息杀死正在运行的containers。 ContainerManager
这部分是NM的关键部分,该部分由如下组件组成,每个节点缺一不可:1) RPC server:介绍来着AMS的请求消息去启动或者关闭一下消息。与ContainerTokenSecretManager 一起工作,有日志可以回滚;
2) ResourceLocalizationService:负责安全下载和组织containers 需要的文件资源,尽力将文件分布到本机的所用磁盘上面,对下载的文件进行权限控制;后面的研究重点;
3) ContainersLauncher:保持一个线程池去准备和尽快启动containers ,当RM和Ams发送消息时清理一些Containers;
4) AuxServices:NM提供了一个架构去拓展他的功能通过配置辅助服务,这个功能值得关注;
5) ContainersMonitor:获取正在运行container 的资源利用率,去隔离和共享资源,每个container 会被RM分配一些资源,如果container 占用超过自己的资源会被kill掉;
6) LogHandler:记录日志,打包发送到hdfs上面;
ContainerExecutor
与地层操作系统交付,安全放置containers 文件和目录,以安全的方式启动和清理Container相应进程。 NodeHealthCheckerService
定时运行脚本去检验节点的健康状态,会检查放置零时文件的磁盘的健康状态。当系统有任何改变都会通知NodeStatusUpdater ,NodeStatusUpdater 然后通知RM。 ContainerTokenSecretManager
保证 authorized users可以获得相关的权限。 ApplicationACLsManagerNM
确保所有请求都被RM批准。 Container Launch
NM 使用如下步骤启动一个container:a) 将需要资源拷贝到本地;
b) 隔离工作目录,目录下面有需要的本地资源;
c) 启动命令行运行container;
MR shuffle with Auxservices
运行MapReduce程序所需的shuffle功能是通过附属服务实现的,该服务会启动一个Netty Server,它知道如何处理来自Reduce Task的MR相关的shuffle请求。MR(MapReduce) AM(ApplicationMaster)为shuffle服务定义服务ID,和可能需要的安全令牌,而NM向AM提供shuffle服务的运行端口号,并由AM传递给各个Reduce Task。【注】mapreudce程序的优化点,后面我们专门分析。