2016-11-30 100 views
0
  1. 比方說,一個64 MB塊在節點A上,並在2個其他節點(B,C)中複製,並且map-reduce程序的輸入拆分大小爲64 MB,這個拆分只有節點A的位置?或者它是否具有所有三個節點A,b,C的位置?
  2. 由於數據對於所有三個節點都是本地的,因此框架如何決定(挑選)要在特定節點上運行的映射任務?
  3. 如果輸入分割大小大於或小於塊大小,它是如何處理的?
+1

[Hadoop輸入分割大小vs塊大小]的可能重複(http://stackoverflow.com/questions/17727468/hadoop-input-split-size-vs-block-size) –

回答

0

Hadoop知道塊位於何處。如果分割完全等於一個塊,那麼Hadoop將嘗試在同一節點上運行地圖任務以應用「數據局部性」原則並保存所需的任何網絡傳輸。

如果A,B,C全部可用,那麼地圖任務將在離客戶端最近的節點上運行。如果節點A不可用,則它將在B或C上運行,具體取決於哪一個最接近客戶端。

如果A,B,C都不可用,那麼Hadoop將找出A,B或C中哪個節點離客戶機最近,然後選擇與A相同機架上的空閒節點(因爲機架內轉賬更快)。如果整個機架處於忙碌狀態,那麼它將別無選擇,只能選擇不同的機架和節點來處理分割。分割將被臨時複製到節點,並且在處理之後,它將從臨時位置被刪除。

但是,如果輸入拆分大於塊大小,則應用完全相同的原則。唯一的區別是Hadoop框架將給出'從塊2分割+幾行'到節點進行處理。