解决yarn无法查看历史日志Logs not available for container_xxx. Aggregation may not be complete

由于 NodeManager 有异常,一时找不到原因,就重新删除再添加。没想到新的问题产生了。在yarn看不到历史日志,页面提示“Aggregation may not be complete, Check back later or try the nodemanager at xxxx”。

这对开发或运维spark、hive程序来说,是非常抓狂的。看不到日志,就不知道问题出在哪里。

网上绝大多数的解决方案是看
yarn.log-aggregation-enable 是否开启

yarn.log-aggregation-enable属性意思是: 是否启用日志聚合
我直接通过Yarn的WebUi查看,发现
默认就是勾选的,为true

在CDH,找到yarn的配置,搜索
yarn.log-aggregation-enable ,如下图所示就是开启的:

在这里插入图片描述

我查了集群,这个是开启了,重启了yarn后,又重新运行一个spark程序,跑完程序后再查看历史日志,问题依旧。

后来又查到另一个关键的相关配置:
yarn.nodemanager.remote-app-log-dir

yarn.nodemanager.remote-app-log-dir参数的意思是:应用程序结束时存储应用程序日志的 HDFS 目录。 

在CDH查看了
yarn.nodemanager.remote-app-log-dir 的路径如下

查看了一下,没看到/opt/logs,又查到相关日志报错如下:

ERROR org.apache.hadoop.yarn.logaggregation.AggregatedLogDeletionService: Error reading root log dir this deletion attempt is being aborted
java.io.FileNotFoundException: File /opt/logs does not exist.
	at org.apache.hadoop.hdfs.DistributedFileSystem.listStatusInternal(DistributedFileSystem.java:986)
	at org.apache.hadoop.hdfs.DistributedFileSystem.access$1000(DistributedFileSystem.java:122)
	at org.apache.hadoop.hdfs.DistributedFileSystem$24.doCall(DistributedFileSystem.java:1046)
	at org.apache.hadoop.hdfs.DistributedFileSystem$24.doCall(DistributedFileSystem.java:1043)
	at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
	at org.apache.hadoop.hdfs.DistributedFileSystem.listStatus(DistributedFileSystem.java:1053)
	at org.apache.hadoop.yarn.logaggregation.AggregatedLogDeletionService$LogDeletionTask.run(AggregatedLogDeletionService.java:82)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)

原因就很清楚,没有那个目录,应该创建那个目录,并赋予相应的权限。

通过CDH进入YARN服务界面,然后选择【创建NodeManager远程应用程序日志目录】。

进行上面的操作后终于问题解决了。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注