yarn配置日志聚合

 

日志聚集是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上,如果启用日志聚集功能需要额外的配置。

 

这个日志存储的就是具体map和reduce的日志,包括框架的和应用程序里自己打印的。这个日志聚合是用来看日志的,而mapreduce job history server,则是用来看某个application的大致统计信息的,包括启停时间,map任务数,reduce任务数以及各种计数器的值等等。job history server是抽象概要性的统计信息,而聚合日志是该application所有任务节点的详细日志集合。


查看日志的命令:$HADOOP_HOME/bin/yarn logs 
-applicationId <app Id>。app id在你命令行执行mapreduce任务的
时候会出现的,比如会出现这么一行:

15/03/16 20:14:27 INFO mapreduce.Job: The url to track the job: http://ylhadoop126:8088/proxy/application_1426507165782_0002/。
或者去你配置的
yarn.nodemanager.remote-app-log-dir所指定的hdfs路径找,具体路径格式为${yarn.nodemanager.remote-app-log-dir}/$user/logs/${app Id}/$nodelog

 

要实现日志聚集,只需要在yarn-site.xml中配置如下几个参数:

(1) yarn.log-aggregation-enable

参数解释:是否启用日志聚集功能。

默认值:false

(2) yarn.log-aggregation.retain-seconds

参数解释:在HDFS上聚集的日志最多保存多长时间。

默认值:-1

(3) yarn.log-aggregation.retain-check-interval-seconds

参数解释:多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值的1/10。

默认值:-1

(4) yarn.nodemanager.remote-app-log-dir

参数解释:当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)。

默认值:/tmp/logs

<think>好的,我需要帮助用户解决Yarn运行时没有生成日志的问题。首先,我应该回顾用户提供的引用内容,看看是否有相关的信息。用户引用了四个来源,其中引用1提到了在YARN上运行Spark以及Kerberos的故障排除,引用2提到了一个spill文件,引用3讨论了log4j配置可能导致的问题,引用4提到还没有通用的历史守护进程来聚合日志,但YARN-321可能有进展。 首先,用户的问题是关于Yarn没有生成日志。根据我的知识,Yarn应用的日志管理通常涉及几个方面:配置是否正确,日志聚合是否启用,以及权限问题等。结合用户提供的引用,尤其是引用3和引用4,可能需要检查log4j的配置以及日志聚合是否配置正确。 接下来,我需要分步骤思考可能的原因和解决方法: 1. **检查日志聚合是否启用**:Yarn默认可能不会立即聚合日志,需要确认yarn.log-aggregation-enable是否设为true。如果未启用,日志可能仍存放在各个NodeManager的本地,需要手动访问节点查看,但用户可能无法看到聚合后的日志。 2. **确认日志目录权限**:如果日志聚合已启用,但日志没有生成,可能是目标目录(如HDFS路径)的权限问题,导致NodeManager无法写入。需要检查目录权限是否正确,确保Yarn用户有写入权限。 3. **Log4j配置冲突**:引用3提到,如果执行器和Application Master使用相同的log4j配置,可能会尝试写入同一文件,导致冲突。需要检查是否在spark-submit或应用配置中正确指定了不同的日志配置文件,避免冲突。 4. **查看ApplicationMaster日志**:即使聚合日志不可用,ApplicationMaster的日志可能仍然在NodeManager的本地目录中。可以通过yarn logs -applicationId <appId>命令尝试获取,或者直接到对应节点的日志目录查找。 5. **YARN配置检查**:确认yarn-site.xml中的相关配置,如yarn.nodemanager.remote-app-log-dir和yarn.nodemanager.remote-app-log-dir-suffix是否正确设置,确保日志聚合路径有效。 6. **Kerberos相关问题**:引用1提到了Kerberos故障排除,如果集群启用Kerberos,可能存在认证问题导致日志写入失败。需要检查kinit是否成功,相关凭证是否有效。 7. **等待日志聚合完成**:有时候日志聚合会有延迟,特别是在应用刚结束时。用户可能需要等待一段时间再尝试获取日志。 8. **检查YARN的Web UI**:通过ResourceManager的Web界面查看应用状态,是否有错误信息提示日志生成问题。 结合用户的引用内容,特别是引用3和引用4,应该重点检查log4j配置是否导致冲突,以及日志聚合是否配置正确。同时,引用4提到YARN-321可能有改进,但可能还未广泛应用,因此用户可能需要手动检查配置。 现在,我需要将这些步骤整理成用户容易理解的解决方案,并引用相关的引用内容来支持。例如,在讨论log4j配置时,引用引用3的内容;在提到日志聚合时,引用引用4的内容。同时,确保使用正确的格式,如行内数学表达式使用$...$,独立公式用$$...$$,不过在这个问题中可能涉及较少数学公式,但要注意中文回答和其他格式要求。</think>### Yarn运行时无日志问题的排查步骤 #### 1. 确认日志聚合功能是否启用 Yarn日志聚合功能需手动开启。检查集群的`yarn-site.xml`配置,确认以下参数为`true`: ```xml <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> ``` 若未启用,日志仅存储在NodeManager的本地目录中,需手动到各节点查找,路径通常为: `$HADOOP_HOME/logs/userlogs/<application_id>/`[^1]。 #### 2. 检查日志聚合目录权限 日志聚合后存储在HDFS中,默认路径为`/tmp/logs`。确保Yarn服务账号(如`yarn`)有权限写入该目录: ```bash hdfs dfs -ls /tmp/logs # 若无权限,需调整: hdfs dfs -chmod -R 1777 /tmp/logs ``` #### 3. 避免Log4j配置冲突 若应用(如Spark)的`log4j.properties`未独立配置,执行器与Application Master可能因共享配置导致日志写入冲突[^3]。解决方法: - 为AM和执行器指定不同的日志文件: ```bash spark-submit --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=am-log4j.properties" \ --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=executor-log4j.properties" \ ... ``` #### 4. 手动拉取日志 即使聚合未完成,可通过Yarn命令尝试获取日志: ```bash yarn logs -applicationId <application_id> ``` 若返回`No logs available`,可能是: - 应用仍在运行,日志未上传。 - 聚合延迟较高(可调整`yarn.log-aggregation.retain-seconds`)。 #### 5. 检查Kerberos认证 若集群启用Kerberos,需确保: - 应用提交前已通过`kinit`获取有效票据。 - NodeManager有权限写入HDFS日志目录(Kerberos凭证过期可能导致写入失败)。 #### 6. 查看NodeManager本地日志聚合完全失败,直接登录到节点查看本地日志: ```bash # 根据Application ID查找对应的NodeManager节点 yarn node -list -appStates ALL | grep <node_host> # 登录节点后查看日志 cd /var/log/hadoop-yarn/userlogs/<application_id> ``` #### 7. 调整Yarn日志保留策略 若日志被过早清理,修改以下参数: ```xml <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> <!-- 默认保留1天 --> </property> ``` ### 关键配置示例 | 配置项 | 推荐值 | 说明 | |--------|--------|------| | `yarn.log-aggregation-enable` | `true` | 启用日志聚合 | | `yarn.nodemanager.remote-app-log-dir` | `/tmp/logs` | HDFS聚合路径 | | `yarn.log-aggregation.retain-seconds` | `604800` | 保留7天 | ### 相关问题 1. 如何配置Yarn日志聚合的保留时间? 2. Kerberos认证失败如何影响Yarn日志生成? 3. Spark on YARN时如何避免日志文件冲突? : 引用1提到YARN上运行Spark时的Kerberos故障排除,可能涉及权限问题。 [^3]: 引用3指出共享log4j配置可能导致日志写入冲突,需独立配置。 [^4]: 引用4提到YARN尚未实现统一的日志聚合服务,需依赖现有配置排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值