解决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远程应用程序日志目录】。

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