YARN——日志聚合

2023-02-28 14:30:13 浏览数 (1)

【简介】

在yarn架构中,application由一个个的container组成,每个container可运行在不同的nodemanager节点上,每个container的日志存储在container所运行的nodemanger节点上,这些日志会有一定的生命周期,超过指定时间后,日志会被删除。

由于日志存放在nodemanager节点的本地文件系统中,在jobhistoryserver中无法访问到这些日志,只能登录到nodemanager节点上进行查看,因此这样的方式使用起来并不方便,尤其是一个application有多个container,container分布在多个nodemanager上运行,有问题要排查时需要分别到不同的nodemanager上进行查看。

日志聚合功能可以很好的解决这个问题,启用日志聚合功能后,nodemanager会自动将container运行的日志上传到HDFS上。这样不管是通过HDFS的web界面还是通过jobhistoryserver的web界面都能很方便的查看到application的所有运行日志。

【相关配置详解】

日志聚合功能有如下相关的配置项:

代码语言:javascript复制
yarn.log-aggregation-enable

是否启用日志聚合功能,默认值为false,即不启用日志聚合功能

代码语言:javascript复制
yarn.nodemanager.remote-app-log-dir

日志聚合后在HDFS上存储的目录位置,在该目录下会按application所属的用户名创建目录。默认值为/tmp/logs

代码语言:javascript复制
yarn.nodemanager.remote-app-log-dir-suffix

在上面提到的用户名目录下,还会创建指定目录前缀,因此结合上面的配置项,container的日志最终的存储目录为:

代码语言:javascript复制
${yarn.nodemanager.remote-app-log-dir}/${user}/${yarn.nodemanager.remote-app-log-dir-suffix}

默认值为logs

代码语言:javascript复制
yarn.log-aggregation.retain-seconds

聚合后的日志在HDFS上的存储生命周期,超过该时间后日志会被删除。默认值为-1,表示永久存储

注意:日志聚合是由nodemanager完成的,而日志的删除是由jobhistoryserver负责完成的。

代码语言:javascript复制
yarn.log-aggregation.retain-check-interval-seconds

日志清除的检测周期,即每隔一段时间检查相关目录下是否有过期的日志,如果有则进行删除。

代码语言:javascript复制
yarn.nodemanager.local-dirs

container运行的中间数据的存储目录

代码语言:javascript复制
yarn.nodemanager.log-dirs

application运行日志在nodemanager本地文件系统上的存放目录

代码语言:javascript复制
yarn.nodemanager.log.retain-seconds

未开启日志聚合的情况下,application运行日志在nodemanager节点本地文件系统上存储的生命周期

代码语言:javascript复制
yarn.nodemanager.delete.debug-delay-sec

默认值为0, 表示开启日志聚合功能的情况下,当application运行结束后,进行日志聚合,然后立马在nodemanger节点上进行删除。

为了方便问题排查,可以设置大于0的数字,即延迟指定时间后再删除。

代码语言:javascript复制
yarn.log-aggregation-status.time-out.ms

resourcemanager等待日志聚合状态汇报的超时时间。

代码语言:javascript复制
yarn.nodemanager.logaggregation.threadpool-size-max

nodemanager中用于日志聚合的线程池的最大个数

代码语言:javascript复制
yarn.nodemanager.log-aggregation.compression-type

日志聚合文件的压缩类型,默认为空,即不进行压缩

代码语言:javascript复制
yarn.nodemanager.log-aggregation.num-log-files-per-app

每个application进行聚合的日志的最大个数

代码语言:javascript复制
yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds

nodemanager进行日志聚合的时间间隔,默认值-1表示当application运行结束后立即进行日志聚合。设置大于0的值表示进行日志聚合的线程会周期性的被唤醒以进行日志的聚合。

代码语言:javascript复制
yarn.nodemanager.log-aggregation.policy.class

日志聚合的策略

默认值为

代码语言:javascript复制
org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AllContainerLogAggregationPolicy

即application的所有container的日志都会被聚合

可选的其他值包括:

代码语言:javascript复制
org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AMOnlyLogAggregationPolicy

即只有类型为application master的rontainer的日志会被聚合

代码语言:javascript复制
org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AMOrFailedContainerLogAggregationPolicy

即类型为application master的container的日志和运行失败的container的日志会被聚合,其他的则不进行聚合

【总结】

文件主要整理了yarn中日志聚合功能的相关配置项。除了正常配置好日志聚合,你可能还需要进行其他相关的配置才能更好的使用日志聚合功能,比如在resourcemanager中设置日志的url,这样可以方便的从resourcemanager的web界面中跳转到jobhistoryserver中查看application的日志。

0 人点赞