Hadoop 2.0中作業(yè)日志收集原理以及配置方法
Hadoop 2.0提供了跟1.0類似的作業(yè)日志收集組件,從一定程度上可認(rèn)為直接重用了1.0的代碼模塊,考慮到Y(jié)ARN已經(jīng)變?yōu)橥ㄓ觅Y源管理平臺(tái),因此,提供一個(gè)通用的日志收集模塊勢(shì)在必行,由于目前通用日志收集模塊正在開(kāi)發(fā)中(可參考“YARN-321”),本文僅介紹MRv2(MapReduce On YARN)自帶的日志收集模塊,包括工作原理以及配置方法。
在Hadoop 2.0中,每個(gè)作業(yè)日志包含兩部分,作業(yè)運(yùn)行日志和任務(wù)運(yùn)行日志,作業(yè)運(yùn)行由MRAppMaster(MapReduce 作業(yè)的ApplicationMaster)產(chǎn)生,詳細(xì)記錄了作業(yè)啟動(dòng)時(shí)間、運(yùn)行時(shí)間,每個(gè)任務(wù)啟動(dòng)時(shí)間、運(yùn)行時(shí)間、Counter值等信息,與 Hadoop 1.0中的JobHistory日志是基本一致。MapReduce作業(yè)的ApplicationMaster也運(yùn)行在Container中,且是編號(hào)為 000001的Container,比如container_1385051297072_0001_01_000001,它自身可認(rèn)為是一個(gè)特殊的task,因此,也有自己的運(yùn)行日志,該日志與Map Task和Reduce Task類似,但并不是前面介紹的“作業(yè)運(yùn)行日志”。
ApplicationMaster產(chǎn)生的作業(yè)運(yùn)行日志舉例如下,日志采用apache avro(作為日志存儲(chǔ)格式是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}}}
作業(yè)運(yùn)行日志產(chǎn)生過(guò)程如下:
步驟1:ResourceManager啟動(dòng)作業(yè)的 ApplicationMaster,ApplicationMaster運(yùn)行過(guò)程中,將日志寫 到${yarn.app.mapreduce.am.staging-dir}/yarn/.staging/job_XXXXX_XXX/下,其中參數(shù) yarn.app.mapreduce.am.staging-dir 的默認(rèn)值是/tmp/hadoop-yarn/staging,該目錄下將存在3個(gè)文件,分別是以“.jhist”、“.summary”和“.xml” 結(jié)尾的文件,分別表示作業(yè)運(yùn)行日志、作業(yè)概要信息和作業(yè)配置屬性,其中,作業(yè)概要信息只有一句話,舉例如下:
|
步驟2:所有任務(wù)運(yùn)行完成后,意味著,該作業(yè)運(yùn)行完成,此時(shí)ApplicationMaster將三個(gè)文件拷貝 到${ mapreduce.jobhistory.intermediate-done-dir}/${username}目錄下,拷貝后的文件名后面添 加”_tmp”,其中mapreduce.jobhistory.intermediate-done-dir默認(rèn)值 是${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate
步驟3:ApplicationMaster將拷貝完成的三個(gè)文件重新命名成“.jhist”、“.summary”和“.xml”結(jié)尾的文件(去掉“_tmp”)
步驟4:周期性掃描線程定期將done_intermediate的日志文件轉(zhuǎn)移到done目錄(通過(guò)參數(shù) mapreduce.jobhistory.done-dir配置,默認(rèn)值為${yarn.app.mapreduce.am.staging- dir}/history/done)下,同時(shí)刪除“.summary”文件(該文件中的信息,.jhist文件中都有)。
步驟5:ApplicationMaster移除
${yarn.app.mapreduce.am.staging-dir}/yarn/.staging/job_XXXXX_XXX/目錄
默認(rèn)情況下,任務(wù)運(yùn)行日志產(chǎn)只會(huì)存放在各NodeManager的本地磁盤上,你可以打開(kāi)日志聚集功能,以便讓任務(wù)將運(yùn)行日志推送到HDFS上,以便集中管理和分析。
默認(rèn)情況下,NodeManager將日志保存到y(tǒng)arn.nodemanager.log-dirs下,,該屬性缺省值 為${yarn.log.dir}/userlogs,也就是Hadoop安裝目錄下的logs/userlogs目錄中,通常為了分?jǐn)偞疟P負(fù)載,我們會(huì) 為該參數(shù)設(shè)置多個(gè)路徑,此外,需要注意的是,ApplicationMaster的自身的日志也存放在該路目下,因?yàn)樗策\(yùn)行在Container之中, 是一個(gè)特殊的task。舉例如下,其中,最后一個(gè)是某個(gè)作業(yè)的ApplicationMaster日志(編號(hào)是000001)。
|
將作業(yè)和任務(wù)日志存放在各個(gè)節(jié)點(diǎn)上不便于統(tǒng)一管理和分析,為此,我們可以啟用日志聚集功能。打開(kāi)該功能后,各個(gè)任務(wù)運(yùn)行完成后,會(huì)將生成的日志推送 到HDFS的一個(gè)目錄下(之前的并不會(huì)立即刪除,在HDFS上,每個(gè)任務(wù)產(chǎn)生的三個(gè)文件,即syslog、stderr和stdout將合并一個(gè)文件,并 通過(guò)索引記錄各自位置),配置方法可參考文章:“Hadoop YARN配置參數(shù)剖析(2)—權(quán)限與日志聚集相關(guān)參數(shù)”。
接下來(lái),講一下MapReduce的JobHistory Server,這是一個(gè)獨(dú)立的服務(wù),可通過(guò)web UI展示歷史作業(yè)日志,之所以將其獨(dú)立出來(lái),是為了減輕ResourceManager負(fù)擔(dān)。通常可以啟動(dòng)在一臺(tái)獨(dú)立的機(jī)器上,你需在mapred- site.xml中對(duì)其進(jìn)行配置,并使用“sbin/mr-jobhistory-daemon.sh start jobhistoryserver”命令啟動(dòng)它。JobHistory Server將會(huì)分析作業(yè)運(yùn)行日志,并展示作業(yè)的啟動(dòng)時(shí)間、結(jié)束時(shí)間、各個(gè)任務(wù)的運(yùn)行時(shí)間,各種Counter數(shù)據(jù)等,并產(chǎn)生一個(gè)指向作業(yè)和任務(wù)日志的鏈 接。
最后,介紹一下mapred-site.xml和yarn-site.xml這兩個(gè)配置文件的作用。Yarn- site.xml是YARN相關(guān)的配置文件,客戶端、ResourceManager和NodeManager需要改配置文件,為了簡(jiǎn)單,可讓這三類節(jié)點(diǎn) 上的該文件是一致的。Mapred-site.xml是MapReduce特有的配置文件,在YARN中,mapreduce已經(jīng)變成了一個(gè)客戶端編程 庫(kù),因此只有客戶端和jobhistory server需要該配置文件,其他節(jié)點(diǎn),比如resourceManager和NodeManager不需要,除非你們也把這些節(jié)點(diǎn)作為客戶端提供給用戶 使用,另外,一定要讓客戶端和jobhistory server上的mapres-site.xml一致。
原文鏈接:http://dongxicheng.org/mapreduce-nextgen/hadoop-2-0-jobhistory-log/