深入剖析Hadoop程序日誌
前提
本文來自於 博客園 逖靖寒的世界 http://gpcuster.cnblogs.com
正文
本文來自於 博客園 逖靖寒的世界 http://gpcuster.cnblogs.com
*.log日誌文件和*.out日誌文件
進入我們的Hadoop_LOG目錄,我們可以看到如下文件:
在啓動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目錄,我們可以看到:
這裏的每一個目錄代表每一個task的輸出日誌。
進入其中一個目錄可以看到:
這裏的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目錄,我們可以看到:
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。