【Hadoop】【Yarn】日志聚合

举报
沙漠里的果果酱 发表于 2023/08/09 15:18:36 2023/08/09
【摘要】 【Hadoop】【Yarn】日志聚合

作业运行日志产生过程如下:
步骤1:ResourceManager启动作业的ApplicationMaster,ApplicationMaster运行过程中,将日志写到${yarn.app.mapreduce.am.staging-dir}/yarn/.staging/job_XXXXX_XXX/下,其中参数yarn.app.mapreduce.am.staging-dir 的默认值是/tmp/hadoop-yarn/staging,该目录下将存在3个文件,分别是以“.jhist”、“.summary”和“.xml”结尾的文件,分别表示作业运行日志、作业概要信息和作业配置属性,其中,作业概要信息只有一句话,举例如下:
jobId=job_1385051297072_0002,submitTime=1385393834983,launchTime=1385393974505,
firstMapTaskLaunchTime=1385393976706,firstReduceTaskLaunchTime=1385393982581,
finishTime=1385393985417,resourcesPerMap=1024,resourcesPerReduce=1024,
numMaps=8,numReduces=1,user=yarn,queue=default,status=SUCCEEDED,
mapSlotSeconds=47,reduceSlotSeconds=5,jobName=QuasiMonteCarlo
步骤2:所有任务运行完成后,意味着,该作业运行完成,此时ApplicationMaster将三个文件拷贝到${ mapreduce.jobhistory.intermediate-done-dir}/${username}目录下,拷贝后的文件名后面添加”_tmp”,其中mapreduce.jobhistory.intermediate-done-dir默认值是${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate
步骤3:ApplicationMaster将拷贝完成的三个文件重新命名成“.jhist”、“.summary”和“.xml”结尾的文件(去掉“_tmp”)
步骤4:周期性扫描线程定期将done_intermediate的日志文件转移到done目录(通过参数mapreduce.jobhistory.done-dir配置,默认值为${yarn.app.mapreduce.am.staging-dir}/history/done)下,同时删除“.summary”文件(该文件中的信息,.jhist文件中都有)。
步骤5:ApplicationMaster移除
${yarn.app.mapreduce.am.staging-dir}/yarn/.staging/job_XXXXX_XXX/目录
默认情况下,任务运行日志产只会存放在各NodeManager的本地磁盘上,你可以打开日志聚集功能,以便让任务将运行日志推送到HDFS上,以便集中管理和分析。
默认情况下,NodeManager将日志保存到yarn.nodemanager.log-dirs下,该属性缺省值为${yarn.log.dir}/userlogs,也就是Hadoop安装目录下的logs/userlogs目录中,通常为了分摊磁盘负载,我们会为该参数设置多个路径,此外,需要注意的是,ApplicationMaster的自身的日志也存放在该路目下,因为它也运行在Container之中,是一个特殊的task。举例如下,其中,最后一个是某个作业的ApplicationMaster日志(编号是000001)。
yarn@YARN-001:/opt/yarn/yarn-client$ ls ../yarn/logs/userlogs/*
../yarn/logs/userlogs/application_1384428704524_0003:
container_1384428704524_0003_01_000004
../yarn/logs/userlogs/application_1384428704524_0008:
container_1384428704524_0008_01_000003
../yarn/logs/userlogs/application_1384428704524_0012:
container_1384428704524_0012_01_000001
将作业和任务日志存放在各个节点上不便于统一管理和分析,为此,我们可以启用日志聚集功能。打开该功能后,各个任务运行完成后,会将生成的日志推送到HDFS的一个目录下(之前的并不会立即删除,在HDFS上,每个任务产生的三个文件,即syslog、stderr和stdout将合并一个文件,并通过索引记录各自位置)

yarn中的几种日志
 服务类日志
诸如ResourceManage、NodeManager等系统自带的服务输出来的日志默认是存放在${HADOOP_HOME}/logs目录下,此参数可以通过参数YARN_LOG_DIR(yarn-env.sh配置文件,当前配置为:/data1/hadoop/logs/$USER)指定。比如resourcemanager的输出日志为yarn-${USER}-resourcemanager-${hostname}.log,其中${USER}s是指启动resourcemanager进程的用户,${hostname}是resourcemanager进程所在机器的hostname,nodemanager的输出日志格式为:yarn-${USER}-nodemanager-${hostname}.log,这类日志可以查看当前resourcemanager和nodemanager两个服务的运行情况。 
YARN_LOG_DIR日志路径:
 
    /var/log/Bigdata/yarn/rm
    /var/log/Bigdata/yarn/nm
    /var/log/Bigdata/mapreduce/jobhistoryserver/

作业日志
1)mapreduce作业的统计日志:
历史作业的记录里面包含了一个作业用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息;这些信息对分析作业是很有帮助的,我们可以通过这些历史作业记录得到每天有多少个作业运行成功、有多少个作业运行失败、每个队列作业运行了多少个作业等很有用的信息。这部分日志会用于JobHistoryServer。 
FusionInsight中配置项
mapreduce.jobhistory.done-dir:/mr-history/done
mapreduce.jobhistory.intermediate-done-dir:/mr-history/tmp,如果没有配置,那么就会获取yarn.app.mapreduce.am.staging.dir +"/history/done_intermediate"


2)作业的运行日志:
AM中记录的运行当中的作业的日志在yarn.app.mapreduce.am.staing.dir.(hdfs:/tmp/hadoop-yarn/staging/history下面),主要用于AM日志查看以及AM挂掉重试任务恢复的依据。
通过参数am.staging控制。对于完成的job信息会放到/mr-history/done目录下面。
运行完成之后会根据不同类型的任务归档到不同的目录下面。例如mapreduce任务会归档到/mr-history/下面:
客户端提交作业的时候上传的job相关的信息会放在这个目录下面。供nodemanager进行本地化下载。

3)任务的运行日志:
以上是作业的日志记录地址,任务的日志记录地址如下:
Container日志包含ApplicationMaster日志和普通Task日志等信息,主要包含container的启动脚本,还有container的运行日志。默认情况下,这些日志信息是存放在${HADOOP_HOME}/logs/userlogs目录下,我们可以通过下面的配置进行修改。
yarn.nodemanager.log-dirs: /srv/BigData/hadoop/data1/nm/containerlogs


二、日志的聚合
从上面作业的运行日志中可以发现,container的日志在一台机器的16块盘上都会存在日志,而且并不知道container的日志会在哪个盘上,默认情况下,每块盘上都会创建相同的applicationid,而且applicationid中都会创建相同的containerid,但是并不是每个container中都会存在日志,这块由container自己的机制选择往哪个container目录中写入日志,其他的container目录则为空。这在一定程度上导致了想查看任务的运行日志比较困难。
日志的聚合功能可以解决这个问题。通过参数:yarn.log-aggregation-enable开启。此项功能会把各nodemanager上的application的所有盘上的container上传到hdfs,对于FusionInsight,日志归集在HDFS上面目录为:/tmp/logs/{user}/logs/,可通过参数指定:

yarn.nodemanager.remote-app-log-dir:/tmp/logs/

yarn.nodemanager.remote-app-log-dir-suffix:logs

查看日志的方式
1)通过web页面
2)命令行 yarn logs -applicationId ${applicationId}


三、日志聚合的机制


四、日志清理

五、日志聚合相关参数
1) yarn.log-aggregation-enable
 
    是否开启日志聚合功能

2) yarn.log-aggregation.retain-seconds
 
    hdfs上的日志保留多久。当前配置路径为:/tmp/logs/${user}/logs。该配置项是由{yarn.nodemanager.remote-app-log-dir
}/${user}/{yarn.nodemanager.remote-app-log-dir-suffix
}
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,则会等待任务执行完还会聚合


六、其他
关于清理日志的方法
1.NonAggregatingLogHandler

参考:https://www.jianshu.com/p/83fcf7478dd7


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。