2012-08-14 56 views
0

我目前正在使用Hadoop同一節點的統計數據讀取。我想知道是否可以獲取有關給定作業的地圖任務是從其自己的節點還是從其他節點讀取其數據的信息。我知道HDFS分佈在所有節點中,但是對於給定的作業和給定的地圖任務,是否有任何計數器/度量標準可以表示從安裝任務運行的同一節點讀取了多少數據,以及多少數據通過網絡讀取。Hadoop的map任務從

回答

0

的Hadoop沒有一個計數器告訴你有多少數據在本地讀取和多少讀取在網絡上。

,你唯一能做的事情將是不同的標準計數器相結合,並且基於本地獲得的近似和過度的網絡讀取數據。

  • DATA_LOCAL_MAPS:作業中使用本地數據(本地機器)的地圖任務數。

  • RACK_LOCAL_MAPS:的是,在同一機架作爲它們的輸入數據的節點上運行地圖任務的數量。

  • OTHER_LOCAL_MAPS:在不同的機架比之一,它們的輸入數據所位於的節點上運行的任務的數量。

  • MAP_INPUT_BYTES:告訴你有多少數據在總所有map任務被消耗(整個作業)

*(你應該檢查櫃檯的確切名稱爲您的Hadoop分佈)

考慮到EACH地圖處理ONE輸入分流和默認輸入分裂是近似相等的,則可以使用以下公式找本地處理數據的總量:

DATA_LOCAL_MAPS * MAP_INPUT_BYTES/(DATA_LOCAL_MAPS + RACK_LOCAL_MAPS + 
              OTHER_LOCAL_MAPS) 

乘法的第二項給出了每個map任務的輸入字節數