Hadoop日志到底存在哪里?
初學者運行MapReduce作業時,經常會遇到各種錯誤,由于缺乏經驗,往往不知所云,一般直接將終端打印的錯誤貼到搜索引擎上查找,以借鑒前人的經 驗。然而,對于hadoop而言,當遇到錯誤時,***時間應是查看日志,日志里通產會有詳細的錯誤原因提示,本文將總結Hadoop MapReduce日志存放位置,幫助初學者定位自己遇到的錯誤。
Hadoop MapReduce日志分為兩部分,一部分是服務日志,一部分是作業日志,具體介紹如下:
1. Hadoop 1.x版本
Hadoop 1.x中MapReduce的服務日志包括JobTracker日志和各個TaskTracker日志,他們的日志位置如下:
JobTracker:在JobTracker安裝節點上,默認位置是
${hadoop.log.dir}/logs/*-jobtracker-*.log,該文件每天生成一個,舊的日志后綴是日期,當天的日志文件 后綴是“.log”,其中${hadoop.log.dir}默認值是hadoop安裝目錄,即${HADOOP_HOME}。
TaskTracker:在各個TaskTracker安裝節點上,默認位置是
$HADOOP_HOME/logs/*-tasktracker-*.log,該文件每天生成一個,舊的日志后面會跟一個日志,當天的日志文件后綴是“.log”
作業日志包括jobhistory日志和task日志兩部分,其中,jobhistory日志是作業運行日志,包括作業啟動時間、結束時間,每個任 務的啟動時間、結束時間,各種counter信息等,用戶可以從這個日志中解析出作業運行的各種信息,是非常有價值的信息。默認存放位置是 JobTracker所在節點的${hadoop.log.dir}/history目錄下,可通過參數 hadoop.job.history.location配置。每個task日志存放在task運行節點上,存放位置 是${hadoop.log.dir}/userlogs/<jobid>/<attempt-id>目錄下,每個task包含 三個日志文件,分別是stdout、stderr和syslog,其中,stdout是通過標準輸出打印出來的日志,比如 System.out.println,注意,程序中通過標準輸出打印的日志并不會直接顯示在終端上,而是保存在這個文件中,syslog是通過log4j打印的日志,通常這個日志中包含的有用信息最多,也是錯誤調試中最關鍵的參考日志。
2. Hadoop 2.x版本
Hadoop 2.x中YARN系統的服務日志包括ResourceManager日志和各個NodeManager日志,他們的日志位置如下:
ResourceManager日志存放位置是Hadoop安裝目錄下的logs目錄下的yarn-*-resourcemanager-*.log
NodeManager日志存放位置是各個NodeManager節點上hadoop安裝目錄下的logs目錄下的yarn-*-nodemanager-*.log
應用程序日志包括jobhistory日志和Container日志,其中,jobhistory日志是應用程序運行日志,包括應用程序啟動時間、結束時間,每個任務的啟動時間、結束時間,各種counter信息等。
Container日志包含ApplicationMaster日志和普通Task日志,它們均存放在Hadoop安裝目錄下的userlogs目 錄中的application_xxx目錄下,其中ApplicationMaster日志目錄名稱為container_xxx_000001,普通 task日志目錄名稱則為container_xxx_000002,container_xxx_000003,….,同Hadoop 1.x一樣,每個目錄下包含三個日志文件:stdout、stderr和syslog,且具體含義是一樣的。
3. 總結
Hadoop日志是用戶定位問題的最重要渠道,對于初學者而言,往往意識不到這一點,或者即使意識到這一點,也找不到日志存放位置,希望本文對初學者有幫助。
原文鏈接:http://dongxicheng.org/mapreduce-nextgen/hadoop-logs-placement/