【Hadoop】【Yarn】查看Yarn作业日志的方法
【Yarn日志归档流程】
Yarn作业运行的过程中,container运行在各个nodemanager上面,会将作业中产生的日志归档在其运行的nodemanager节点的指定路径下。
通过配置项:yarn.nodemanager.log-dirs进行配置。华为云MRS服务中,默认的路径为/srv/Bigdata/hadoop/data1/nm/containerlogs中。
如果开启了日志归集特性,那么在作业结束之后,nodemanager会将container的日志上传到hdfs的指定路径上面。路径通过参数:yarn.nodemanager.remote-app-log-dir配置,默认路径为/tmp/logs/{USER}/logs.
日志聚合相关参数
1) yarn.log-aggregation-enable
是否开启日志聚合功能
2) yarn.log-aggregation.retain-seconds
hdfs上的日志保留多久。默认为15天。
FI默认的归档路径配置路径为:/tmp/logs/${user}/logs
3) yarn.log-aggregation.retain-check-interval-seconds
多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值的1/10,已经配置为:1296000(15天)
4) yarn.nodemanager.remote-app-log-dir
前缀目录:/tmp/logs
5) yarn.nodemanager.remote-app-log-dir-suffix
后缀目录:logs
6) yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds
每隔一段时间进行日志的聚合,当前配置为:3600。如果配置为-1,则会等待任务执行完还会聚合
【MapReduce类型作业的历史作业归档】
上面介绍了Yarn的日志生成和归档过程,nodemanager虽然将container的日志归档在了HDFS上面,但是看起很不方便。
那么针对不同类型作业的历史日志查看服务应运而生,例如Spark作业和Mapreduce作业都有自己的JobHistoryServer。对于一些作业,如果没有实现自己的JobHistoryServer,那么就不能向Spark作业和Mapreduce作业那样,通过页面这种比较直观的方式来查看历史作业的详细task日志信息。如下图所示:
而对于mapreduce类型的作业,可以在yarn原生页面入口进入JobHistoryServer的页面,直接查看历史作业的日志。
JobHistoryServer要使用的日志其实分为两个部分:1-Job的日志和配置文件,即jobxxx.jhs和job.xml;2-yarn的归档日志;
MRAppMaster中记录的运行当中的作业的日志在yarn.app.mapreduce.am.staing.dir.(hdfs:/tmp/hadoop-yarn/staging/history下面),主要用于AM日志查看以及AM挂掉重试任务恢复的依据。通过参数am.staging控制。对于完成的job信息会放到/mr-history/tmp目录下面。
JobhistoryServer服务会持续监控该目录/mr-history/tmp,如果有新完成的作业日志加入,就会将其mv到/mr-history/done目录下面。
JobHistoryServer页面上读取的job信息也是已/mr-history/done目录中的为准,但是这个目录中仅仅有job.jhst文件和job.xml文件。
这两个文件仅仅是job的配置信息和基本的作业描述信息例如,有几个map 几个reduce,多少成功,多少失败等。但是没有具体的task日志。
具体的task日志依然使用的是nodemanager归档在hdfs上面的日志。只是jobhistoryserver将其进行解析,以比较友好的方式展示出来。
上面提到过,JobHistoryServer的作用仅仅是将运行完的job信息归档到了/mr-history/目录下面,即仅仅包含了作业的概要信息,至于每一个container的详细信息依然需要解析nodemanager归档的container日志信息获取。为了验证这种说法,我们尝试将某一个作业归档的container日志信息删除,然是依然保留/mr-history/的信息,然后查看这个job的历史信息,可以看到job的基本信息是可以看到的。
但是如果我们要继续查看该job中某一个task的具体信息,那么将会出现下面的页面:
因此从上面的过程中不难看出,jobhistoryServer其实也强依赖yarn中归档的日志,jhs'自己值保存了一个mapreduce job运行的基本信息(有多少map, reduce,有多少count,哪些成功,哪些失败等),但是具体的container日志还是依然yarn中归档的日志,如果yarn归档的日志由于过期(15天)或者由于误删除,那么jobhistoryserver就不能够看到历史作业的详细task信息了。
【如何查看作业日志】
上面介绍了Yarn的日志归档原理和mapreduce jobhistoryserver日志归档和显示的逻辑。
因此,从上面的介绍不难看出,我们可以通过两种种方式查看日志:
1-对于非主流计算框架的Yarn作业日志。
由于非主流的计算框架没有专门的JobHistoryServer去归档和展示历史信息,因此只能通过去nodemanager节点上(运行过程中)或者hdfs归档目录(运行结束)去查看container的日志。包括AM,因为AM本身也是一个container。
2-对于主流的计算框架,例如Mapreduce,Spark等,有自己的JobHistoryServer,可以直接在Yarn原生页面跳转到JobHistoryServer页面查看日志。当然,很多事有由于我们要定位现网问题,没有办法直接去连到客户网络去看jobhistoryserver页面,因此,还是需要将hdfs上面归档的container日志回传,线下分析。
- 点赞
- 收藏
- 关注作者
评论(0)