Hadoop 2.0提供了跟1.0类似的作业日志收集组件,从一定程度上可认为直接重用了1.0的代码模块,考虑到YARN已经变为通用资源管理平台,因此,提供一个通用的日志收集模块势在必行,由于目前通用日志收集模块正在开发中(可参考“YARN-321”),本文仅介绍MRv2(MapReduce On YARN)自带的日志收集模块,包括工作原理以及配置方法。
在Hadoop 2.0中,每个作业日志包含两部分,作业运行日志和任务运行日志,作业运行由MRAppMaster(MapReduce作业的ApplicationMaster)产生,详细记录了作业启动时间、运行时间,每个任务启动时间、运行时间、Counter值等信息,与Hadoop 1.0中的JobHistory日志是基本一致。MapReduce作业的ApplicationMaster也运行在Container中,且是编号为000001的Container,比如container_1385051297072_0001_01_000001,它自身可认为是一个特殊的task,因此,也有自己的运行日志,该日志与Map Task和Reduce Task类似,但并不是前面介绍的“作业运行日志”。
ApplicationMaster产生的作业运行日志举例如下,日志采用apache avro(作为日志存储格式是Hadoop 2.0唯一使用到Avro的地方)工具,以json的格式保存:
{“type”:”JOB_SUBMITTED”,”event”:{“org.apache.hadoop.mapreduce.jobhistory.JobSubmitted”:
{“jobid”:”job_1385051297072_0002″,”jobName”:”QuasiMonteCarlo”,”userName”:”yarn”, “submitTime”:1385393834983,”jobConfPath”:
“hdfs://hadoop-test/tmp/hadoop-yarn/staging/yarn/.staging/job_1385051297072_0002/job.xml”,”acls”:
{},”jobQueueName”:”default”,”workflowId”:”",”workflowName”:”",”workflowNodeName”:”",
“workflowAdjacencies”:”",”workflowTags”:”"}}}
{“type”:”JOB_INITED”,”event”:{“org.apache.hadoop.mapreduce.jobhistory.JobInited”:
{“jobid”:”job_1385051297072_0002″,”launchTime”:1385393974505,”totalMaps”:8,
“totalReduces”:1,”jobStatus”:”INITED”,”uberized”:false}}}
{“type”:”JOB_INFO_CHANGED”,”event”:{“org.apache.hadoop.mapreduce.jobhistory.JobInfoChange”:
{“jobid”:”job_1385051297072_0002″,”submitTime”:1385393834983,”launchTime”:1385393974505}}}
作业运行日志产生过程如下:
步骤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将合并一个文件,并通过索引记录各自位置),配置方法可参考文章:“Hadoop YARN配置参数剖析(2)—权限与日志聚集相关参数”。
接下来,讲一下MapReduce的JobHistory Server,这是一个独立的服务,可通过web UI展示历史作业日志,之所以将其独立出来,是为了减轻ResourceManager负担。通常可以启动在一台独立的机器上,你需在mapred-site.xml中对其进行配置,并使用“sbin/mr-jobhistory-daemon.sh start jobhistoryserver”命令启动它。JobHistory Server将会分析作业运行日志,并展示作业的启动时间、结束时间、各个任务的运行时间,各种Counter数据等,并产生一个指向作业和任务日志的链接。
最后,介绍一下mapred-site.xml和yarn-site.xml这两个配置文件的作用。Yarn-site.xml是YARN相关的配置文件,客户端、ResourceManager和NodeManager需要改配置文件,为了简单,可让这三类节点上的该文件是一致的。Mapred-site.xml是MapReduce特有的配置文件,在YARN中,mapreduce已经变成了一个客户端编程库,因此只有客户端和jobhistory server需要该配置文件,其他节点,比如resourceManager和NodeManager不需要,除非你们也把这些节点作为客户端提供给用户使用,另外,一定要让客户端和jobhistory server上的mapres-site.xml一致。
原创文章,转载请注明: 转载自董的博客
本文链接地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-2-0-jobhistory-log/
作者:Dong,作者介绍:http://dongxicheng.org/about/
本博客的文章集合:http://dongxicheng.org/recommend/
相关推荐
涉及到了Hadoop2.0、Hbase、Sqoop、Flume、Hive、Zookeeper的具体环境搭建
hadoop 2.0 详细安装手册。hadoop 2.0 详细安装手册。
Hadoop 2.0基本架构和发展趋势
实战Hadoop2.0 PPT文档,没有经过修饰的原文档,大家分享学习
Hadoop 2.0安装部署方法,手把手教,如何在linux上安装hadoop
本文是详细的Hadoop2.0安装方法步骤
第5章 Hadoop 2.0 主流开源云架构(一) 第5章 Hadoop 2.0 主流开源云架构(二) 第5章 Hadoop 2.0 主流开源云架构(三) 第5章 Hadoop 2.0 主流开源云架构(四) 第5章 Hadoop 2.0 主流开源云架构(五) 第6章 ...
hadoop2.0版本安装手册,包含hadoop、hive、hbase、mahout、sqoop、spark、storm、整个体系的安装配置
hadoop 2.0 文档资料。
Hadoop2.0架构设计与原理.ppt
实战Hadoop 2.0:从云计算到大数据(第二版)
为hadoop的学习搭建环境,研究hadoop处理和存储的机制。
CentOS6.0-Hadoop安装手册,详细介绍centos下hadoop的搭建过程
第 4 章 安装部署 Hive 444.1 解压并安装 Hive 44
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据...
大数据处理--hadoop2.0核心架构技术,主要介绍了大数据面临的挑战,而hadoop正是解决这些挑战的重要技术,接着分别介绍了hadoop1.0和hadoop2.0的区别,进而重点讲到hadoop2.0 YARN,详细分析MapReduce及HDFS架构。
开源思想,少要积分,仅供学习参考。 Hadoop2.0 从0到HA安装运行步骤。 开源思想,少要积分,仅供学习参考。 Hadoop2.0 从0到HA安装运行步骤。
第5章 Hadoop 2.0 主流开源云架构(一) 第5章 Hadoop 2.0 主流开源云架构(二) 第5章 Hadoop 2.0 主流开源云架构(三) 第5章 Hadoop 2.0 主流开源云架构(四) 第5章 Hadoop 2.0 主流开源云架构(五) 第6章 ...
Hadoop 2.0部署配置文件示例.zip
Hadoop2.0安装部署、MapReduce编程实践: 1.Hadoop 2.0体系介绍 2.Hadoop 2.0安装部署方法 3.MapReduce编程实践 4.MapReduce和关系型数据库计算速度比较