Log Aggregation Status TIME_OUT的缘起

来源:互联网 发布:淘宝上图片多大尺寸 编辑:程序博客网 时间:2024/06/03 18:04
在spark on yarn运行中,有时会发现spark程序运行完毕后,spark的运行界面没有信息,或者找不到相关的运行信息了,经仔细查看NodeManager UI
,出现如下信息:
Log Aggregation Status TIME_OUT

原来NodeManager可以在应用结束后将日志安全地移动到分布式文件系统HDFS,当应用(application)结束时,用户能通过 YARN 的命令行工具、网页端或者HDFS中来查看这些日志
当打开yarn.log-aggregation-enable为true时,会启用聚合,如果为false,NodeManager会把日志存储在节点本地(${yarn.nodemanager.log-dirs}/application_${appid} )下

日志聚合的相关配置:
yarn.nodemanager.remote-app-log-dir: 这是 NodeManager将日志聚合后存放在HDFS 上的地址.
yarn.nodemanager.remote-app-log-dir-suffix: 日志目录会这样创建 {yarn.nodemanager.remote-app-log-dir}/${user}/{thisParam}
yarn.log-aggregation.retain-seconds: 聚合后的日志文件在多久后被删除, 配置成 -1 或者一个负值不会删除
yarn.log-aggregation.retain-check-interval-seconds: 多长时间去检查一次哪些聚合日志需要删除.
yarn.log.server.url: 应用结束后NodeManager会将网页访问自动跳转到聚合日志的地址, 指向的是 JobHistory上的地址.

回到“Log Aggregation Status TIME_OUT”这个问题上来,如果有1个控制超时的参数就可以解决这个问题了,遗憾的是,hadoop2.8.0版本才出现了下面这个参数,我们来看官方的注释:

<property>
    <name>yarn.log-aggregation-status.time-out.ms</name>
    <value>600000</value>
    <description>
        How long for ResourceManager to wait for NodeManager to report its
        log aggregation status. If waiting time of which the log aggregation
        status is reported from NodeManager exceeds the configured value, RM
        will report log aggregation status for this NodeManager as TIME_OUT
    </description>
</property>

在更低的hadoop版本中如果要修复这个问题,通过打patch即可解决

备注:
要打印出一个给定应用的所有日志, 命令如下
> yarn logs -applicationId <application ID>