Hadoop 2.6 日誌檔案和MapReduce的log檔案研究心得
學習演練Hadoop 2.6有一段日子了。現在才大致搞清楚了系統裡面各個log的位置和功能,在這裡總結一下。網上的資料並不豐富,甚至Google出來的結果也不是很滿意,或許這個是太簡單了,牛人都不屑來寫。也可能是各個公司藏著掖著的東西。
Hadoop 2.6包含兩個大部分:DFS和Yarn,而Yarn裡面又包含在Resource Manager的JVM中執行的部分和在Node Manager裡面執行的JVM部分。所以整個系統(不考慮加裝ZooKeeper的HA的情況)的log是分別放在3個log裡面的。
1. 對於DFS的log,在Name Node和Data Node裡面,預設可以在${HADOOP_INSTALL}/logs裡面看到。這個是非DFS的檔案,直接可以通過Linux檔案系統看到。
2. 對於Yarn的log,在Resource Manager和Node Manager裡面,預設可以在${HADOOP_INSTALL}/logs裡面看到。這個也是非DFS的檔案,直接可以通過Linux檔案系統看到。
對於MapReduce任務的log,情況就比較的複雜了。在2.6裡面,task是按照application->container的層次來管理的,所以在Name Node機器上執行mapreduce程式的時候,在console裡面看到的log都可以通過在相應的data node/node manager裡面的${HADOOP_INSTALL}/logs/userlogs下面找到。這個部分也是非DFS檔案,直接可以通過Linux檔案系統看到。
這些log也可以通過Hadoop Web管理頁面看到,比較方便。
網路上搜來的資訊基本都是關於上面這些部分的。可對於一個開發人員而言,上面這些log對於除錯程式的幫助就不大了。Java程式設計師會經常要用System.out/err來輸出中間內容到standard output,而且工業界早就用logger來記錄系統狀態和幫助除錯了。那麼我們在mapreduce程式體裡面怎麼來得到這些log哪。
首先講講System.out的輸出,這個網路上的介紹還算詳細。基本來說在main方法裡面的部分都可以在console上輸出。這一點不管是在Eclipse裡面通過外掛連結DFS執行on MapReduce的時候,還是直接在namenode上跑jar包,都可以看的到。直接程式設計讀寫DFS的程式也能夠通過這個方法來看到中間結果和除錯程式。而上面也說了,因為這個task的部分是執行在resource manager的啟動的JVM裡面(這個部分不是很確定,也許是單獨啟動的一個JVM),所以System.out的輸出可以看到。而一旦程式進入Mapper和Reducer的部分,這個時候,任務是分發到datanode的機器裡面跑,那裡的JVM的輸出就不會再返回到task的JVM了,所以在Mapper和Reducer裡面的System.out輸出是無法看到的。
那麼這個時候怎麼來寫log哪?網路搜尋的結果基本給了3個方法:1. 用log4j來生成logger;2. 用apache common裡面的LogFactory生成logger;3. 用MultipleOutput來自己寫log輸出。
1和2本質是一樣的,只是呼叫現成的Logger類。3是要自己管理log檔案的生成和輸出,靈活但是很累。
現在最關鍵的問題來了。我用Log4j或者LogFactory的Logger輸出的log檔案在哪裡?搜了一天,基本講的都語焉不詳,特別是針對Hadoop 2.6的,沒有找到。綜合了幾個帖子,終於發現了問題所在。為了能看到Logger輸出的內容,需要做如下幾件事:
1. 在啟動Hadoop叢集的時候,除了start-yarn.sh和start-dfs.sh,還要啟動historyserver,命令是
mr-jobhistory-daemon.sh start historyserver
mr-jobhistory-daemon.sh命令是在${HADOOP_INSTALL}/sbin/目錄下面。啟動完了,用jps命令可以看到有JobHistoryServer的程序啟動。
啟動了HistoryServer後,就可以看到Tracking URL裡面的History了。
還能在Hadoop Web管理介面裡看到每個Job的歷史Map和Reduce任務,以及每個任務所在的datanode。
點選Maps和Reduces後面的數字link,就能看到每個任務執行的情況。
但是當去點選log的連結的時候,會碰到Aggregation function is not enabled錯誤。為了能看到每個Map和Reduce任務的Log,還必須在yarn-site.xml裡面配置aggregation為true。
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>Configuration to enable or disable log aggregation</description>
</property>
然後將yarn-site.xml同步到所有的節點,在重啟叢集。這個時候再點選上面那個logs連結,就可以看到每個任務的log了,而Logger們輸出的內容也在裡面!!
到了這裡,就只剩下一個問題了。這個log檔案在哪裡?檢視yarn-site.xml後終於發現了MapReduce任務的log的位置。
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/logs</value>
<description>HDFS directory where the application logs are moved on application completion. Need to set appropriate permissions. Only applicable if log-aggregation is enabled. The default value is "/logs" or "/tmp/logs" </description>
</property>
注意紅色字的部分,這裡清楚的指明瞭這個log是存放在HDFS檔案系統裡面的,不是放在Linux檔案系統裡面的。在hdfs://namenode/logs/hadoop/logs裡面,終於發現了每個任務對應的log資料夾。每個任務資料夾裡有兩個檔案。分別對應的Map任務和Reduce任務。[[email protected] ~]$ hdfs dfs -ls hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001
15/04/29 23:02:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r----- 2 hadoop supergroup 58369 2015-04-29 13:32 hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001/<strong><em>hostname</em></strong>_39575
-rw-r----- 2 hadoop supergroup 399834 2015-04-29 13:32 hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001/<strong><em>hostname</em></strong>_54053
hostname部分是對應的datanode的hostname。
在Web頁面裡顯示的也就是從這兩個檔案裡讀取並排版的。自此每個log檔案的具體位置終於水落石出。
個人心得,有錯誤和不全面的地方歡迎拍磚。
相關推薦
Hadoop 2.6 日誌檔案和MapReduce的log檔案研究心得
學習演練Hadoop 2.6有一段日子了。現在才大致搞清楚了系統裡面各個log的位置和功能,在這裡總結一下。網上的資料並不豐富,甚至Google出來的結果也不是很滿意,或許這個是太簡單了,牛人都不屑來寫。也可能是各個公司藏著掖著的東西。 Hadoop 2.6包含兩個大部分:
Hadoop 2.6.5 FileSystem和Configuration兩個對象的探究
family 上傳數據 大數 塊大小 緩存 完成 color span 小夥伴 Hadoop 2.6.5 FileSystem和Configuration兩個對象的探究 版權聲明:本文為yunshuxueyuan原創文章,如需轉載,請標明出處。【http://www.
Hadoop-2.4.1學習之HDFS檔案許可權和ACL
之前在論壇看到一個關於HDFS許可權的問題,當時無法回答該問題。無法回答並不意味著對HDFS許可權一無所知,而是不能準確完整的闡述HDFS許可權,因此決定系統地學習HDFS檔案許可權。HDFS的檔案和目錄許可權模型共享了POSIX(Portable Opera
Hadoop的JVM重用機制和小檔案解決
Hadoop的JVM重用機制和小檔案解決 一、hadoop2.0 uber功能 1) uber的原理:Yarn的預設配置會禁用uber元件,即不允許JVM重用。我們先看看在這種情況下,Yarn是如何執行一個MapReduce job的。首先,Resource Manager裡的App
2.6 all_test.py總執行檔案
all_test.py這個檔案是呼叫test_case下面的所有的.py檔案,並且自動執行test_case裡面以test開頭的用例,執行順序按照ascii碼。 具體是怎麼展現的看如下 因為生成測試報告需要藉助第三方的模組,所以接下來要配置HTMLTestRunnner.py檔案,將該
在spring boot下如何通過rest 介面 來上傳檔案 和下載檔案 到 hadoop hdfs
本文將用程式碼來演示在spring boot裡面,用hadoop client,通過restful API來上傳檔案 和下載檔案 到 hadoop hdfs。 裡面有一些程式碼依賴坑,注意繞行。 前提: 如果你的程式碼在windows上執行,去連線linux上的hado
Spark on YARN模式的安裝(spark-1.6.1-bin-hadoop2.6.tgz + hadoop-2.6.0.tar.gz)(master、slave1和slave2)(博主推薦)
說白了 Spark on YARN模式的安裝,它是非常的簡單,只需要下載編譯好Spark安裝包,在一臺帶有Hadoop YARN客戶端的的機器上執行即可。 Spark on YARN分為兩種: YARN cluster(YARN standalone,0.9版本以前)和 YA
HDP 2.2 ( Hadoop 2.6 ) 叢集的記憶體引數配置和引數調優 (Yarn/MapReduce2)
近期在根據叢集上的各節點的物理機配置對叢集的記憶體引數進行調整。 因此較系統的學習了一下hadoop裡對資源調配的各元件的相關引數的含義。 作為示例的配置叢集版本是2.6, hortonworks 2.2. 首先要理解, hadoop 中 yarn 作為資源管理器,
使用JetbrainsCrack-2.6.10-release-enc.jar檔案註冊啟用idea
1.下載JetbrainsCrack-2.6.10-release-enc.jar檔案,資源可以在網上找 2.在C:IDEA\bin目錄下找到idea.exe.vmoptions,idea64.exe.vmoptions兩個檔案並使用notepad開啟 3.新增J
Hadoop上傳檔案和下載檔案時候出現的問題
在Hadoop做上傳下載操作的時候,上傳的時候會出現一個超時的異常,在下載的時候回多出來crc的檔案 /**
hadoop 2.6.0 LightWeightGSet源碼分析
lar therefore name ref implement urn round runtime info LightWeightGSet的作用用一個數組來存儲元素,而且用鏈表來解決沖突。不能rehash。所以內部數組永遠不用改變大小。此類不支持空元素。此類也不是線
Hadoop問題:啟動hadoop 2.6遇到的datanode啟動不了
left hand list common status ctc 解決辦法 總結 aac 問題描述:第一次啟動輸入jps都有,第二次沒有datanode 日誌如下: 查看日誌如下: 2014-12-22 12:08:27,264 INFO org.mortbay.l
2.2.6 掛起和繼續執行
一次 pack 現在 中斷線程 main 新建 cep pub 狀態 package 第二章.新建線程;/** * Created by zzq on 2018/1/17. */public class 線程中斷 { public static void main(S
2.6 計算機輸入和輸出
退役 丟失 蘋果公司 部分 他在 計算器 CP cpu 計算 計算機組成 2 計算機基本結構 2.6 計算機輸入和輸出 如果無法與外界進行聯系,計算機的CPU,存儲器再強大也沒有任何的用處。因此我們需要在我們的模型機上加上輸入與輸出,這才能構成一個完整的計算機模型。 這
hadoop window下安裝 hadoop-2.6.0
all art ice dfs- win 技術 per atan 分享圖片 一、官網下載hadoop http://hadoop.apache.orghttps://archive.apache.org/dist/hadoop/common/hadoop-2.6.0 管理員
Windows批處理檔案(.bat檔案和.cmd檔案)介紹以及簡單使用
首先說一下cmd檔案和bat檔案的區別,從檔案描述中的區別是,cmd檔案叫做:Windows命令指令碼,bat檔案叫:批處理檔案,兩者都可以使用任意一款文字編輯器進行建立、編輯和修改,只是在cmd中支援的命令要多於bat。 批處理檔案是一種沒有什麼固定格式的檔案,他可以處理一條或者多條命令,
易學筆記-第2章:spring中的Bean/2.6 環境引數和佔位符
第2章:spring中的Bean/2.6 環境引數和佔位符/2.6.1 環境引數/2.6.1.1 概念 概念與設定 指的是為了區分不同的環境而設定的引數,比如開發環境和生產環境 第2章:spring中的Bean/2.6 環境引數和佔
Java讀檔案和寫檔案
import java.io.*; public class FileTest { String path = "C:\\Users\\Desktop\\test.txt"; File f = new File(path); private void writeFile() throw
python讀取大檔案和普通檔案
讀取檔案,最常見的方式是: with open('filename', 'r', encoding = 'utf-8') as f: for line in f.readlines(): do_something(line) 但是,當完成這一操作時,readlines()
vue引入外部js檔案和scss檔案
最近在做一個vue專案,已經有一段時間了。之前對在vue專案如何引入外部的js檔案和scss檔案一片空白。網上百度也是魚龍混雜,很少有用的東西。後來自己通過一個線上專案學習到了。所以將自己的實現記錄下來 我將寫在vue檔案的js抽出來,放在一個js檔案裡面。然後在vue引入的形式如下(es6的寫