Hadoop實踐(三)---MapReduce中的Counter

在Hadoop的MapReduce框架中包括6種Counters,每一種包含若干個Counter,分別對Map和Reduce任務進行統計
Tips:圖片中是Hadoop2.7.3 Counters 略有更新 注意區分 其實根據字面意思大概就知道這個Counter是幹啥的

1、File System Counters

表示job與文件系統交互的讀寫統計

  • FILE_BYTES_READ: job讀取本地文件系統的文件字節數

  • FILE_BYTES_WRITTEN : job向本地文件系統寫入的文件字節數

  • HDFS_BYTES_READ : job讀取HDFS的文件字節數(包括元數據,所以比FileInputFormatCounters中的BYTES_READ略大)

  • HDFS_BYTES_WRITTEN: job向HDFS寫入的文件字節數

這裏寫圖片描述

2、Job Counters

描述與job調度相關的統計

  • Data-local map tasks : Job被調度時,啓動了一個data-local(在源文件的副本上執行map task的taskTracker(在hadoop 2.0中應該是NodeManager)) 【可以理解爲數據本地化】

  • FALLOW_SLOTS_MILLIS_MAPS :當前job爲某些map task的執行保留了slot,總共保留的時間是多少 ,此Counter就是多少(毫秒)

  • FALLOW_SLOTS_MILLIS_REDUCES :當前job爲某些reduce task的執行保留了slot,總共保留的時間是多少 ,此Counter就是多少(毫秒)

  • SLOTS_MILLIS_MAPS : 所有map task佔用slot的總時間,包含執行時間和創建/銷燬子JVM的時間 (毫秒)

  • SLOTS_MILLIS_REDUCES: 所有reduce task佔用slot的總時間,包含執行時間和創建/銷燬子JVM的時間 (毫秒)

  • Launched map tasks : 此job啓動了多少個map task

  • Launched reduce tasks : 此job啓動了多少個reduce task

這裏寫圖片描述

3、Map-Reduce Framework

這個類型包含了相當多job執行的細節

一般情況下:

  1. record就表示一行數據
  2. byte表示這行數據的大小是多少

  • Combine input records: Combiner是爲了減少儘量減少需要拉取和移動的數據,所以combine輸入條數與map的輸出條數是一致的。

  • Combine output records:經過Combiner後,相同key的數據經過壓縮,在map端自己解決了很多重複數據,表示最終在map端中間文件中的所有條目數

  • Failed Shuffles: copy線程在抓取map端中間數據時,如果因爲網絡連接異常或是IO異常,所引起的shuffle錯誤次數

  • GC time elapsed (ms):通過JMX獲取到執行map與reduce的子JVM總共的GC時間消耗

  • Map input records:所有map task從HDFS讀取的文件總行數

  • Map output bytes:Map的輸出結果key/value都會被序列化到內存緩衝區中,所以這裏的bytes指序列化後的最終字節之和

  • Map output records: map task的直接輸出record是多少,就是在map方法中調用context.write的次數,也就是未經過Combine時的原生輸出條數

  • Merged Map outputs: 記錄着shuffle過程中總共經歷了多少次merge動作

  • Reduce input groups: Reduce總共讀取了多少個這樣的groups

  • Reduce input records: 如果有Combiner的話,那麼這裏的數值就等於map端Combiner運算後的最後條數,如果沒有,那麼就應該等於map的輸出條數

  • Reduce output records: 所有reduce執行後輸出的總條目數

  • Reduce shuffle bytes:Reduce端的copy線程總共從map端抓取了多少的中間數據,表示各個map task最終的中間文件總和

  • Shuffled Maps: 每個reduce幾乎都得從所有map端拉取數據,每個copy線程拉取成功一個map的數據,那麼增1,所以它的總數基本等於 reduce number * map number

  • Spilled Records: spill過程在map和reduce端都會發生,這裏統計在總共從內存往磁盤中spill了多少條數據

  • SPLIT_RAW_BYTES: 與map task 的split相關的數據都會保存於HDFS中,而在保存時元數據也相應地存儲着數據是以怎樣的壓縮方式放入的,它的具體類型是什麼,這些額外的數據是MapReduce框架加入的,與job無關,這裏記錄的大小就是表示額外信息的字節大小

這裏寫圖片描述

4、Shuffle Errors

描述Shuffle過程中的各種錯誤情況發生次數,基本定位於Shuffle階段copy線程抓取map端中間數據時的各種錯誤

  • BAD_ID: 每個map都有一個ID,如果reduce的copy線程抓取過來的元數據中這個ID不是標準格式,那麼此Counter增加

  • CONNECTION : 表示copy線程建立到map端的連接有誤 ,那麼此Counter增加

  • IO_ERROR: copy線程如果在抓取map端數據時出現IOException,那麼此Counter增加

  • WRONG_LENGTH:map端的中間結果是壓縮數據,所以有兩個length信息:源數據大小與壓縮後數據大小。如果這兩個length信息傳輸的有誤(負值),那麼此Counter增加

  • WRONG_MAP: 每個copy線程抓取的map數據不是copy線程之前定義好的map,那麼就表示把數據拉錯了 ,那麼此Counter增加

  • WRONG_REDUCE:如果copy線程抓取的數據不是爲此reduce而準備的,那還是拉錯數據了,那麼此Counter增加

這裏寫圖片描述

5、File Input Format Counters

表示map task讀取文件內容(總輸入數據)的統計

  • BYTES_READ:map task的所有輸入數據(字節),等於各個map task的map方法傳入的所有value值字節之和

這裏寫圖片描述

6、File Output Format Counters

表示reduce task寫出文件內容(總輸入數據)的統計

  • BYTES_Written:reduce task的所有輸出數據(字節),等於各個reduce task的reduce方法寫出的所有value值字節之和

這裏寫圖片描述

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