2011-07-12 160 views
3

我有一個功能需要在很多文件(1000's)上調用。每個都獨立於另一個,並且可以並行運行。每個文件的功能輸出不需要與其他文件合併(當前)。我有很多的服務器,我可以擴展這個的,但我不知道該怎麼做:MapReduce或批處理作業?

1)在其上運行MapReduce的

2)創建1000個就業機會的(每個人都有它的工作原理不同的文件上)。

一種解決方案會比另一種解決方案更可取嗎?

謝謝!

回答

6

MapReduce將爲分佈大型數據集工作負載提供重要價值。在你的情況下,在小型獨立數據文件上做小型獨立工作,在我看來這可能是矯枉過正的。

所以,我寧願運行一堆動態創建的批處理文件。

,或者,使用羣集管理器和作業調度,如SLURMhttps://computing.llnl.gov/linux/slurm/

SLURM:一個高度可擴展資源管理器

SLURM是專爲一個開源的資源管理器所有大小的Linux集羣 。它提供了三個關鍵功能。首先它將 分配給 用戶的資源(計算機節點)獨佔和/或非獨佔訪問一段時間,以便他們可以執行工作。其次,它提供了一個框架,用於在一組分配的節點上啓動,執行和監視工作 (通常是並行作業)。最後,它通過管理待處理的 工作隊列來仲裁資源爭用。

+2

+1。一般來說,你想要做的最簡單的事情,將適合你的問題。 @PA指出,設置mapreduce來完成獨立文件中可以使用獨立腳本完成的事情是過度的。話雖如此,如果你知道你想學習MapReduce出於其他原因,並且想用這個更簡單的問題作爲出發點,那就去做吧。但我不會在這種情況下推薦它。 –

2

因爲它只有1000個文件(而不是1000000000個文件),所以完整的HADOOP設置可能是矯枉過正的。 GNU並行試圖填補順序腳本和Hadoop之間的差距:

ls files | parallel -S server1,server2 your_processing {} '>' out{} 

你可能會想了解--sshloginfile。根據文件的存儲位置,您也可能想學習--trc

觀看介紹視頻瞭解更多:http://www.youtube.com/watch?v=OpaiGYxkSuQ