【yarn】任务日志丢失问题分析

当一个实时任务在YARN上运行时挂掉,发现任务日志消失。通过检查任务结束时间、节点日志,发现日志丢失可能由于找不到用户导致。经过官方文档查询及社区讨论,推测可能是运维操作影响了用户名,从而导致容器启动失败和日志丢失。通过此问题分析,增加了故障排查经验。

【yarn】任务日志丢失问题分析

故事背景

今天中午收到了一个报警邮件通知。内容大致为:有一个正在 yarn上运行的flink的实时任务挂掉了。
针对上述的现象,我们的开发工程师先打开yarnweb ui找到对应的job的任务页面。查询任务日志。
在这里插入图片描述
点击这个log,找不到任何日志。那么很显然,这个任务的container已经没了,日志已经找不到了。
引出问题:日志怎么会消失?

探究过程

  1. 通过上图的Finished这一栏可以看到,这个任务在什么时候结束运行的,从上图得知,这个任务是在Wed Nov 16 12:58:09 +0800 2022挂掉的。
  2. 记录最下面Node栏对应的机器ip(在上面的图片中我打码了,这个机器是yarn的一个node节点,请根据自己的环境来分析)
  3. 在做好上述两点的基础上,先找到这台Node节点,然后检查该节点的NodeManager的日志,目前我用的环境是cdh,所以我可以在cloudera manager管理界面上查看到对应的NodeManager的角色日志,找到Finshed时间对应的日志,日志如下:
<think>嗯,用户需要查找Hadoop YARN日志的存储位置,这是一个典型的运维问题。从引用内容看,用户可能正在调试集群或排查任务失败问题,情绪比较急切——毕竟日志找不到就像医生找不到病历。 引用[1]和[2]提供了关键线索:YARN日志管理存在分散存储和磁盘溢出两大痛点,而日志位置主要取决于log4j配置。这里需要特别注意三点:一是默认路径可能在/etc/hadoop下,二是不同发行版(CDH/HDP/原生Hadoop)路径可能不同,三是NodeManager本地日志和聚合到HDFS的日志要区分开。 用户提供的引用[3]补充了重要背景:YARN特意设计了日志聚合功能来解决Hadoop 1.x的日志分散问题。这说明用户如果找不到日志,很可能是因为没开启聚合功能,或者聚合后不知道HDFS路径格式。 引用[4]虽然讲Flink案例,但验证了我们的判断——大日志直接web查看不现实,必须定位物理路径。这个用户应该遇到了类似问题,可能某个作业生成了GB级日志。 综合来看,用户真正的需求可能不只是“位置”,而是“如何快速定位并查看特定应用日志”。所以回答要覆盖三层:基础路径配置、聚合功能启用方法、以及日志查询技巧。考虑到用户可能是中级运维,可以适当提及log4j滚动策略配置这类进阶内容。 安全方面要提醒慎用rm -rf清理日志,毕竟生产环境误删就悲剧了。最后补充日志聚合的状态检查命令很关键,很多用户开了聚合却忘了验证是否生效。 </think>Hadoop YARN日志的存储位置分为**本地日志**和**聚合日志(HDFS)** 两种形式,具体取决于配置: ### 一、默认本地存储位置 1. **NodeManager本地路径** YARN容器(Container)的原始日志默认存储在集群各节点的本地磁盘上: ``` /tmp/logs/<user>/logs/ ``` - `<user>`:启动YARN任务的用户名(如`yarn`) - **日志结构示例**: ```bash /tmp/logs/yarn/logs/application_1678954321000_0001/container_1678954321000_0001_01_000001/ ├── stderr ├── stdout └── syslog ``` 2. **路径自定义方法** 通过修改`yarn-site.xml`调整本地存储路径: ```xml <property> <name>yarn.nodemanager.log-dirs</name> <value>/data/yarn/logs</value> <!-- 自定义目录 --> </property> ``` ### 二、聚合日志存储(HDFS) 启用日志聚合后,容器日志会在应用完成后上传至HDFS集中管理[^3]: 1. **启用聚合配置**(`yarn-site.xml`): ```xml <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/tmp/yarn-logs</value> <!-- HDFS存储路径 --> </property> ``` 2. **聚合日志访问方式** - **通过YARN CLI查询**: ```bash yarn logs -applicationId <application_id> ``` - **直接访问HDFS路径**: ``` hdfs://<namenode>:8020/tmp/yarn-logs/<user>/logs/<application_id>/ ``` ### 三、关键配置文件定位 - **日志滚动策略**:由`log4j.properties`控制(路径通常为`/etc/hadoop/conf/`或`$HADOOP_HOME/etc/hadoop/`) - **配置项参考**: ```properties # 控制单个日志文件大小(默认256MB) yarn.log.maxfilesize=256MB # 保留的滚动日志数量 yarn.log.maxbackupindex=10 ``` > ⚠️ **注意事项** > 1. 本地日志可能被定期清理(取决于`yarn.nodemanager.log.retain-seconds`配置) > 2. 若未开启聚合功能,日志仅存在于执行节点本地[^2] > 3. 生产环境强烈建议启用日志聚合,避免节点故障导致日志丢失[^3] ### 📍 日志位置确认步骤 1. 检查`yarn-site.xml`中的`yarn.nodemanager.log-dirs`(本地路径) 2. 确认`yarn.log-aggregation-enable`是否为`true` 3. 若启用聚合,检查`yarn.nodemanager.remote-app-log-dir`(HDFS路径) --- ### 🔍 相关问题 1. **如何防止YARN本地日志占满磁盘?** > 需配置`log4j.properties`的滚动策略(`RollingFileAppender`)并设置`yarn.nodemanager.log.retain-seconds`自动清理旧日志[^1] 2. **为什么YARN应用完成后无法通过`yarn logs`命令查看日志?** > 可能因未启用日志聚合,或HDFS聚合目录权限错误导致上传失败[^3] 3. **如何调整YARN聚合日志在HDFS的保存周期?** > 通过HDFS生命周期管理工具(如`hdfs dfs -expire`)或第三方组件(如Apache Ranger)设置保留策略 4. **Flink on YARN日志存储有何特殊配置?** > Flink会继承YARN配置,但额外提供`yarn.log-config-file`参数覆盖日志级别(引用[4]案例中可通过`flink run -yd`参数定位日志节点)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值