深入剖析Hadoop程序日誌

深入剖析Hadoop程序日誌

 

 前提

本文來自於 博客園 逖靖寒的世界 http://gpcuster.cnblogs.com

瞭解log4j的使用

 正文

本文來自於 博客園 逖靖寒的世界 http://gpcuster.cnblogs.com

*.log日誌文件和*.out日誌文件

進入我們的Hadoop_LOG目錄,我們可以看到如下文件:

image 

在啓動Hadoop集羣時,由hadoop-daemon.sh腳本指定一些列環境變量,然後log4j.properties文件讀取相應的環境變量產生對應的*.log日誌文件。這個日誌文件輸出類型爲org.apache.log4j.DailyRollingFileAppender,它會自動按天更新。

*.out文件則是啓動某個程序的標準輸出重定向。

比如:

hadoop-admin-datanode-horde20.log是在horde20這臺機器上啓動datanode進程的日誌輸出,由log4j實現。

hadoop-admin-datanode-horde20.out則是在horde20這臺機器上啓動datanode時的標準輸出。

這些日誌僅僅包含在horde20這臺機器上啓動datanode進程的日誌,沒有其他的信息。

userlogs目錄下的日誌文件

進入userlogs目錄,我們可以看到:

image

這裏的每一個目錄代表每一個task的輸出日誌。

進入其中一個目錄可以看到:

image

這裏的stderr和stdout記錄了我們的task(map or reduce)的在這臺機器上運行的過程中所產生的標準錯誤輸出和標準輸出。這些信息集羣中的每一個機器上都會出現,如果數據量足夠多的話:)

syslog則記錄了在我們的task中,通過log4j接口記錄的日誌信息。

每一個task都會通過TaskRunner.run()來啓動,它會爲每一個子java程序指定標準錯誤輸出和標準輸出到前面提到的文件中,同時設置相應的參數,其中包括”-Dhadoop.root.logger=INFO,TLA”,這個TLA的定義可以在log4j.properties文件中找到,具體實現是org.apache.hadoop.mapred.TaskLogAppender。這個參數指定了在我們的task中,通過log4j接口記錄的日誌信息都記錄到syslog中。

history目錄下的日誌文件

進入jobtracker機器的history目錄,我們可以看到:

image 

horde20_1250841267760_job_200908211554_0001_conf.xml記錄了我們運行這個job時候的配置文件信息。

horde20_1250841267760_job_200908211554_0001_admin_wordcount記錄了我們運行這個job的情況。

他們是由JobHistory產生的,並且只在jobtracker機器上產生。

EventCounter

在Hadoop的默認配置log4j.properties中,所有通過log4j接口記錄的日誌信息還會記錄到一個叫EventCounter的Appender中,它的實現是org.apache.hadoop.metrics.jvm.EventCounter,具體的作用是統計Hadoop中使用log4j記錄INFO,WARN,ERROR,FATAL信息的次數。

後記

本文介紹了Hadoop中所有的程序日誌的來源和作用。希望能給開發和維護人員以幫助。

如果希望完全瞭解Hadoop的運行狀況信息,還需要參考counter和metric。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章