2014-04-02 28 views
0

假設我們有10個數據點和5個映射器,目標是計算點之間的距離。通常這將O(N^2)通過比較每兩對在一起。爲每個映射器加載相同的文件

我想要做的是將包含數據點的整個文件加載到每個映射器,並使每個映射器在不同的點上運行。例如,讓映射器#1計算點1和點2與所有其他點的距離,映射器#2計算點3和點4與所有其他點的距離,依此類推。

我在一篇論文中遇到了這個算法,但沒有具體的實現方法。 有關如何將整個文件加載到每個映射器或者如何使每個映射器通過文件在特定索引上運行的任何想法或建議都將不勝感激。

回答

0

看看this paper,建議使用「塊嵌套循環」連接(第3節),它與您所要求的略有不同,但可以輕鬆擴展以符合您的需求。如果您將R和S同時作爲一個來源,那麼最終會根據您的要求將所有點與所有其他點進行比較。

根據您的要求,您不需要實施僅保留top-k結果的第二個MapReduce作業。

在hadoop 1.2.0(舊API)中,通過使用conf.get("mapred.task.partition")命令,可以通過使用conf.get("mapred.map.tasks")命令和當前映射器來獲取映射器的總數。

但是,要回答有關如何爲所有映射器獲取相同文件的問題,可以使用Distributed Cache

相關問題