MapReduce 的特性

Counters

也許常常你會想要了解正在進行分析的數據的運行情況,例如,在統計無效record時,發現無效的record佔整個數據集的比例比較高,你也許會檢查爲什麼會有這麼多的記錄被標記爲無效——也許是程序中的一個bug,或者是數據質量的問題,確實有許多無效的記錄。

Counter是一個比較好的途徑,用於收集job的統計信息,無論是質量控制,還是應用層面的數據統計。同時它還有助於問題的診斷。如果你很想在map task或reduce task中放入一條日誌信息,比較好的做法是看能否可以用一個Counter來代替,因爲,對於一個大型的分佈式job來說,獲取Counter的值要比獲取日誌的輸出容易。另外,要得到一個record在某種條件下發生的次數,從日誌文件中獲得要做更多的工作。

Built-in Counters

Hadoop爲每個Job維護着一些計數器,它們記錄着不同方面的內容。例如,統計已處理的字節數和record數,可由此確定預期消耗的輸入量和預期產生的輸出量。

Counters被分成了不同的組,下表爲幾個常用的內置counter組:


每個組要麼包括task counter(用於更新task的進度),要麼包括job counters(用於更新job的進度)。

Task counters

Task counter用於收集task整個執行過程信息,其結果爲job中所有task的彙總。例如,MAP_INPUT_RECORDS 計數器,用於統計每個map task讀取到的record,並對job中的所有map task做彙總,所以,最後的結果爲整個job輸入record的數量。

Task counters還維護着每個task的嘗試數,並定期的發送給application master,所以它可以做全局聚合,另外,task counter每次發送都是全量的,而不是僅發送自上次以來的統計,因爲,這可以預防因消息的丟失而引起的錯誤,並且,在job運行期間,如果task失敗了,counter可能也會停止。

Counter的值是在job成功完成時才確定的,然而,一些counter會提供一些有用的診斷信息作爲一個task的進展,並且可以通過Web UI來監控它們。

Job counters

Job counters是由application master維護的,所以它需要通過網絡發送。它們屬於job級別的統計,在task運行時它們的值是不會改變的。例如,TOTAL_LAUNCHED_MAPS 計數器用於統計job的整個過程啓動的task的數量。


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