Hadoop 2.0中作業日志收集原理以及配置方法
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” 結尾的文件,分別表示作業運行日志、作業概要信息和作業配置屬性,其中,作業概要信息只有一句話,舉例如下:
|
步驟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)。
|
將作業和任務日志存放在各個節點上不便于統一管理和分析,為此,我們可以啟用日志聚集功能。打開該功能后,各個任務運行完成后,會將生成的日志推送 到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/