董西城《深入解析YARN》- 第7章 NodeManager剖析
7.1 概述
7.1.1 NodeManager基本职能
NM和 RM AM的 关系.png7.1.1 NodeManager 架构
image.png7.2 健康检查
--
7.3 分布式缓存机制
image.png7.3.2 分布式缓存实现
image.pngContainer的工作目录位于{user}/{appid}/${containerid}目录下
❑PUBLIC资源:存放在
{yarn.nodemanager.local-dirs}/filecache/目录下,每个资源将单独存放在以一个随机整数命名的目录中,且目录的访问权限均为0755。
❑PRIVATE资源:存放在{yarn.nodemanager.local-dirs}/usercache/{user}是应用程序提交者,默认情况下,均为NodeManager启动者),每个资源将单独存放在以一个随机整数命名的目录中,且目录的访问权限均为0710。❑APPLICATION资源:存放在{yarn.nodemanager.local-dirs}/usercache/{appcache}/{appid}是应用程序ID),每个资源将单独存放在以一个随机整数命名的目录中,且目录的访问权限均为0710;
为了避免缓存的文件过多导致磁盘“撑爆”,NodeManager会定期清理过期的缓存文件,具体方法如下:每隔一定时间
yarn.nodemanager.localizer.cache.cleanup.interval-ms(单位是毫秒,默认值是10×60×1000,即10分钟)启动一次清理工作,确保每个缓存目录中文件容量小于yarn.nodemanager.localizer.cache.target-size-mb(单位是MB,默认是10240,即10GB),如果超过该值,则采用LRU(Least Recently Used)算法清除已不再使用的缓存文件,直至文件容量低于设定值
资源下载过程
7.4 目录结构管理
- 数据目录
配置项:yarn.nodemanager.local-dirs - 日志目录
配置项: yarn.nodemanager.log-dirs 容器日志
配置项:hadoop.log.dir nodemanager服务本身日志
7.4.1 日志目录结构
❑stdout:使用标准输出函数打印的日志,比如Java中的System.out.print输出的内容。
❑stderr:标准错误输出产生的日志信息。
❑syslog:使用log4j打印的日志信息,最常用
-
清理机制
配置项:yarn.nodemanager.log.retain-seconds
保留用户日志的时间(以秒为单位)。仅适用在日志聚合已禁用的情况下。 -
日志聚合
image.png
该机制将HDFS作为日志聚集仓库,它将应用程序产生的日志上传到HDFS上,以便统一管理和维护。该机制由两阶段组成:文件上传和文件生命周期管理。
- 文件上传
当一个应用程序运行结束时,它产生的所有日志将被统一上传到HDFS上的
${remoteRootLogDir}/${user}/${suffix}/${appid}目录中
(${remoteRootLogDir}值由参数yarn.nodemanager.remote-app-log-dir指定,默认是"/tmp/logs";
${user}为应用程序拥有者;
${suffix}值由参数yarn.nodemanager.remote-app-log-dir-suffix指定,默认是"logs";
${appid}为应用程序ID),且同一个节点中所有日志保存到该目录中的同一个文件,这些文件以节点ID命名。
例如:
/hadoop/agg-logs/mr/logs/application_1587802751255_17720
-
生命周期管理
转存到HDFS上的日志的生命周期不再由NodeManager负责,而是由JobHistory服务管理 -
查看日志命令( 注意要切换到对应user身份下)
yarn logs -applicationId application_1587802751255_17720
7.6 Container生命周期剖析
Container启动过程主要经历三个阶段:资源本地化、启动并运行Container和资源清理
image.png