2014-01-18 21 views
0

我希望我的映射器使用哈希映射來檢查某些東西。哈希映射值對於所有映射器和每個映射器負載都是相同的,因此個別和所有內存都由其消耗。我希望哈希映射加載一個,所有映射器都使用它。你認爲有什麼辦法呢?我知道每個映射器使用不同的JVM機器。 謝謝全部是以任何方式使用共享數據映射器?

回答

0

有一些東西叫分佈式緩存。即使使用分佈式緩存,你也不能在兩個mapper jvm進程之間共享內存(你的hashmap)。 但是,這種分佈式緩存的目的是在集羣中的所有節點上分發像查找文件這樣的小文件。再次,您必須爲節點中的每個映射器進程單獨構建散列映射。

+0

我想在映射器之間共享內存JVM進程和分佈式緩存不適合我。 – vahid

0

定義散列映射爲靜態成員變量** Map類
限定static boolean init_once = false

超越控制設置功能,用來初始化哈希映射在設置(設置在每一個任務被調用一次,但所有maptask份額可以共享哈希表)

定義布爾init_once =假,在設置功能

if(!init_once) 
{ 
    init_once = true; 
    //* you init code here 
} 

說明:它不是線程安全的,如果Hadoop的maptask在多線程運行莫de,mutex應該用來確保操作是itom

+0

我這樣做,但每個地圖加載哈希映射。 – vahid

+0

我看到,每個任務都會調用setup。 – michaeltang

+0

我聽說哈希映射定義爲靜態是每個任務跟蹤器運行但不測試。 – vahid

0

@vahid Map/Reduce顯式不是這樣設置的。如果其中一個映射器出現故障並需要重新啓動,會發生什麼情況?也許你應該看看像MPI。少量的信令信息可以通過計數器共享 - 與每個心跳一起傳輸。

+0

如果其中一個Mappers失敗不會在我的情況下有任何問題。 MPI非常疲憊,我不喜歡那樣。我強制減少Mapper的數量,每個映射器使用1.5 GB的內存,而在一天內完成的是兩天內完成。 – vahid