2013-04-20 76 views
2

如何讓我的所有映射器都可以訪問一個變量,例如TreeMap對象,而無需每個映射器每次都重新構造TreeMap?構建完成後,該對象將永遠不會再被修改。mapreduce如何共享全局常量變量

回答

5

考慮將TreeMap對象的內容放在Distributed Cache中。如果數據量小,你可以將對象的內容在您的配置對象:

conf.set("key", "value"); 

然後使用JobConf對象來訪問它在你的映射。

+0

感謝您的回答。但是,對於分佈式緩存,我確實有一個問題,每個映射器要請求資源的開銷是多少?理論上,我希望每個物理節點都有一份資源的副本,以便所有映射器都可以訪問它,或者由於MapReduce可以跨越數千個節點,因此這是不可能的? – Jin 2013-04-20 21:29:39

+0

我正在共享的資源是數組中所有可能的單詞的索引,以計算矢量相似性,因此它可能會高達幾萬條條目。 – Jin 2013-04-20 21:30:43

+1

@Jin將分佈式緩存在啓動之前複製到每個任務,因此訪問分佈式緩存是本地文件訪問。 – 2013-04-21 07:33:46