1. 程式人生 > >Hadoop 2.0中的日誌收集以及配置方法

Hadoop 2.0中的日誌收集以及配置方法

命名 tail his als 作業 fix enable 決定 RM

Hadoop中的日誌包含三個部分,Application Master產生的運行日誌和Container的日誌。

一、ApplicationMaster產生的作業運行日誌

Application Master產生的日誌信息詳細記錄了Map Reduce job的啟動時間,運行時間,用了多少個Mapper,多少個Reducer,Counter等等信息。MapReduce作業中的Application Master是運行在container中的。

默認情況下,Application Master產生的日誌信息保存在HDFS上的特定的路徑下,由以下幾個參數來決定。

yarn.app.mapreduce.am.staging-dir : 默認為/tmp/hadoop-yarn/staging

mapreduce.jobhistory.done-dir : 存放已經結束的MR job的日誌,默認為${yarn.app.mapreduce.am.staging-dir}/history/done

mapreduce.jobhistory.intermediate-done-dir : 存放正在運行中的MR job的日誌,默認為${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate

到達HDFS目錄下查看後發現,每個MR job都包含兩個文件,一個是.jobhist結尾的文件,一個conf.xml

技術分享圖片

打開一個jhist查看,前半部分是avsc文件,描述了數據文件的結構,例如包含了什麽字段,每個字段的數據類型以及possible value.

技術分享圖片

後面的部分則是json格式的數據,描述了MapReduce Job的運行狀態和日誌信息。

技術分享圖片

打開conf.xml可以發現,這個xml文件中包含了這個MapReduce job的參數。

技術分享圖片

二、Container日誌

Container日誌存放在每個NodeManager的本地磁盤上,存放位置由參數 yarn.nodemanager.log-dirs 決定,默認是$HADOOP_HOME/logs/userlogs下。這裏包含了每一個application的log.

技術分享圖片

每一個以application命名的文件夾下,包含三個container的文件夾,以0000001結尾的文件夾下的文件就是ApplicationMaster的運行日誌。

技術分享圖片

每個container文件夾下都包含三個文件,syserr,sysout, syslog

技術分享圖片

三、日誌聚集功能

因為container的運行日誌保存在每個NodeManager的本地磁盤下,不方便管理,可以啟用日誌聚集功能,打開該功能後,container的日誌會被上傳到HDFS某個目錄下,並將syserr,sysout和syslog合並成一個文件,可以通過jobhistory server來查看,在沒有啟用日誌聚集的功能時,在jobhistory server的Web UI裏是沒辦法查看某個Map或者Reduce的日誌的。

技術分享圖片

並且用"yarn logs -applicationId xxxx" 命令嘗試輸出yarn的log,log是沒辦法顯示的。

在每個NodeManager的yarn-site.xml中配置以下參數。

1.yarn.log-aggregation-enable

是否啟用日誌聚集功能,默認值為false

2.yarn.log-aggregation.retain-seconds

在HDFS上聚集的日誌最多保存多長時間,默認值為-1,-1的意思是不刪除?

3.yarn.log-aggregation.retain-check-interval-seconds

隔多長時間查看聚集的日誌並刪除已經超過時間的日誌,默認值為-1。如果設置成0或者一個負數,則這個值會被計算成log保留時間的十分之一。

4.yarn.nodemanager.remote-app-log-dir

日誌被轉移到的HDFS路徑,默認值為/tmp/logs

5.yarn.nodemanager.remote-app-log-dir-suffix

日誌被轉移到的HDFS路徑的子目錄,默認為logs, 所以默認情況下日誌會被存放在${yarn.nodemanager.remote-app-log-dir}/${user}/logs下。

其他參數可以參考https://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

接下來我們來驗證一下,如果yarn.log-aggregation.retain-seconds設置成-1,也就是默認值,會不會進行日誌聚集呢?

此時我在ResourceManager和NodeManager的yarn-site.xml都加入了以下的參數。

技術分享圖片

接下來重啟yarn,並且跑一個MapReduce Job試試。

技術分享圖片

此時我們可以在jobhistory server中查看到這個job的log.

技術分享圖片

過十分鐘左右再來查看,log還在,並且查看HDFS路徑/tmp/logs/root/logs,所有的log文件都在此處。

技術分享圖片

參考文章:

https://blog.csdn.net/u011414200/article/details/50338073

Hadoop 2.0中的日誌收集以及配置方法