假設在HDFS中存儲塊大小是默認的64MB。現在我將InputSplit大小更改爲128MB。如果InputSplit大小與塊大小不同,會發生什麼情況?
其中一個數據節點只有1塊本地存儲的信息。 JobTracker給它一個映射器。它如何在128MB大小的分割上運行map()?
假設在HDFS中存儲塊大小是默認的64MB。現在我將InputSplit大小更改爲128MB。如果InputSplit大小與塊大小不同,會發生什麼情況?
其中一個數據節點只有1塊本地存儲的信息。 JobTracker給它一個映射器。它如何在128MB大小的分割上運行map()?
128 MB的文件,具有64 MB的塊大小 - >默認值 - > 2地圖任務 128 MB的文件,具有64 MB的塊大小 - > min分流大小128 MB - > 1地圖任務
你可以做到這一點,但你會失去地方。默認分割算法堅持 阻止邊界的原因是,每個任務都單獨處理一個塊,並且調度程序可以更有效地使任務在該單個塊所在的位置運行。
當你重寫分鐘吐出尺寸,使分裂攜帶兩個區塊價值偏移+長度, 那麼這兩個塊可以駐留在不同的節點,但是該任務將只運行在一個 節點,導致非數據本地處理,最終可能會變慢。
在這種情況下,您有效地確保需要轉到映射器的數據的一部分對於映射器正在運行的節點不是本地的。
hadoop框架將確保映射器獲取數據,但這將意味着網絡流量的增加。
那麼映射器節點是否會運行它的塊,然後要求另一個塊被髮送? – user1956609
是的,這就是我所理解的。這樣,網絡流量就會增加,工作會變得更慢。 – donut