yarn相关文章:
☞hadoop之yarn命令详解
☞hadoop之yarn详解(基础架构篇)
版本:
yarn:2.6.0+cdh5.11.0
一、前言
对于从事大数据相关工作的朋友来说,在平时应该会跟yarn打过不少交道。像MapReduceonyarn,Sparkonyarn,Flinkonyarn等都是需要将应用运行在yarn上面的。但是对于应用运行日志的查看,yarn却不像寻常服务那样方便,确实是有一些门槛的。而今天,我们就来好好梳理运行在yarn上面的应用日志相关参数及查看方式,最后以查看Flinkonyarn日志示例。
二、作业本地日志
Container日志包含ApplicationMaster日志和普通Task日志等信息,由配置yarn.nodemanager.log-dirs管理,这个是应用的本地(nodemanager节点)日志,在名为
由于作业在Container里面运行,应用会随机调度在某一NodeManager节点,假如yarn.nodemanager.log-dirs配置了多个路径。那么查看某应用日志,就比较繁琐了,你需要先确定NodeManager节点,然后找到日志路径,如果日志路径配置多的话,寻找日志比较困难。
三、日志聚合
为了解决以上痛点,yarn为了方便用户,还支持开启日志聚合功能,设置yarn.log-aggregation-enable为true,默认为false。日志聚合是yarn提供的日志中央化管理功能,收集每个容器的日志并将这些日志移动到文件系统中,比如HDFS上,方便用户查看日志。
可能大部分朋友,都会通过执行yarnlogs-applicationIdContainer−Id的目录下有该Container生成的文件err、log和out文件。由于作业在Container里面运行,应用会随机调度在某一NodeManager节点,假如yarn.nodemanager.log−dirs配置了多个路径。那么查看某应用日志,就比较繁琐了,你需要先确定NodeManager节点,然后找到日志路径,如果日志路径配置多的话,寻找日志比较困难。¨K4K为了解决以上痛点,yarn为了方便用户,还支持开启日志聚合功能,设置∗∗yarn.log−aggregation−enable∗∗为true,默认为false。日志聚合是yarn提供的日志中央化管理功能,收集每个容器的日志并将这些日志移动到文件系统中,比如HDFS上,方便用户查看日志。可能大部分朋友,都会通过执行yarnlogs−applicationId{applicationId}来查看应用日志。yarnlogs-applicationId命令查看的其实就是聚合后的应用日志,也就是HDFS上面的日志,日志目录可由yarn-site.xml文件参数配置:
结合上述两个参数,默认情况下,远程日志目录将在/tmp/logs/{user}为yarn应用执行用户。
日志聚合开启后,运行的应用日志是什么时候触发聚合操作呢?运行中还是结束后?我们继续往下看:
我们又找到了yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds配置,该配置表示:NodeManager上传日志文件的频率。默认值为-1。默认情况下,日志将在应用程序完成时上传。通过设置该配置,可以在应用程序运行时定期上传日志。可以设置的最小滚动间隔秒数为3600。
yarn更多配置参数可参考:https://hadoop.apache.org/docs/r2.6.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
四、日志清理
1、本地日志
yarn.nodemanager.log.retain-seconds:保存在本地节点的日志的留存时间,默认值是10800,单位:秒,即3小时。当开启日志聚合功能后,该配置无效。
yarn.nodemanager.delete.debug-delay-sec:默认值为0,表示在开启日志聚合功能的情况下,应用完成后,进行日志聚合,然后NodeManager的DeletionService立即删除应用的本地日志。如果想查看应用日志,可以将该属性值设置得足够大(例如,设置为600=10分钟)以允许查看这些日志。
yarn.nodemanager.delete.thread-count:NodeManager用于日志清理的线程数,默认值为4。
2、远程聚合日志
yarn.log-aggregation.retain-seconds:在删除聚合日志之前保留聚合日志的时间。默认值是-1,表示永久不删除日志。这意味着应用程序的日志聚合所占的空间会不断的增长,从而造成HDFS集群的资源过度使用。
yarn.log-aggregation.retain-check-interval-seconds:聚合日志保存检查间隔时间,确定多长时间去检查一次聚合日志的留存情况以执行日志的删除。如果设置为0或者负值,那这个值就会用聚合日志保存时间的1/10来自动配置,默认值是-1。
五、查看FlinkonYarn日志
现在以在yarn上查看flink应用日志为例,由于flink应用是实时运行的,所以如果不配置yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds的话,则不会将日志聚合到HDFS上,那就需要我们去查看Container日志。
1、yarnapplication-list
2、yarnapplicationattempt-list<ApplicationId>
3、yarncontainer-list<ApplicationAttemptId>
4、查看对应Container日志
上述列表中,Container启动最早的那个编号是jobmanager,其余的是taskmanager。根据yarn配置:yarn.nodemanager.log-dirs,路径为:/data/yarn/container-logs。
前往对应Host节点,查看/data/yarn/container-logs/{Container-Id}下面的容器日志。
当然,也有朋友会问,我在yarnresourceManagerUI上面也可以看到应用日志啊。是的,能看到,但我还是感觉命令行简单,并且你也不能保证每个项目的yarn环境,都能访问外网是吧。
所以我上面分享的查到对应的Container日志命令,是很有必要掌握的。
六、总结
1、本篇文章,以yarn2.6.0版本为例,主要讲解了yarn应用日志相关,分为本地Container日志和聚合日志。
2、接下来又讲解了yarn应用日志的相关参数,比如:日志存储目录、日志聚合相关参数、日志清理相关参数等
3、最后,就以查看flinkonyarn日志为例,梳理了一下用yarn命令如何定位Container日志所在主机,如何用命令来查看日志。当然最后也建议大家,尽量学会以命令行的方式查看日志,因为不是每个项目环境的yarn都留有外网,而命令行则是我们程序员最后的倔强。
----------END----------
hadoop之yarn命令详解
hadoop之yarn详解(基础架构篇)
Elasticsearch平滑下线节点实践指南
我有好几种办法让你访问github速度起飞,不信进来看!
Ambari前端之ambari-web模块概述