即使在單臺計算機上,MapReduce抽象處理問題也不錯嗎?例如,我有一個12核心的機器,我必須在數千個文件中統計單詞(經典的MapReduce示例)。MapReduce非常適合解決單機多核內存環境中的問題嗎?
考慮到我們正在使用單個硬盤驅動器的單臺機器上工作,在多線程中使用映射器和減速器的MapReduce實現是解決此問題的好方法嗎?
我想我的問題歸結爲這個:MapReduce範例僅適用於在一組機器中工作嗎?
即使在單臺計算機上,MapReduce抽象處理問題也不錯嗎?例如,我有一個12核心的機器,我必須在數千個文件中統計單詞(經典的MapReduce示例)。MapReduce非常適合解決單機多核內存環境中的問題嗎?
考慮到我們正在使用單個硬盤驅動器的單臺機器上工作,在多線程中使用映射器和減速器的MapReduce實現是解決此問題的好方法嗎?
我想我的問題歸結爲這個:MapReduce範例僅適用於在一組機器中工作嗎?
我想我的問題歸結爲這個:MapReduce範例僅適用於在一組機器中工作嗎?
一般來說,是的:MapReduce在單臺PC上可能效率較低。我無法想象MapReduce在非分佈式環境(即單個PC,單個硬盤驅動器)中使用時會優於更多資源優化方法的優點(如果有的話)。換句話說,如果您試圖從單臺PC中擠出一點點性能,那麼您最有可能通過定製解決方案而不是MapReduce來實現它。
但是,如果您計劃添加更多節點並創建集羣,那麼MapReduce將成爲轉向範例。
如果每個地圖任務完成的工作更加實質化(例如計算密集型),則對於單臺機器而言,mapreduce方法可能是一個不錯的選擇。 –
一般來說,你可以有兩種情況:
對於2.1和2.2版本,MapReduce範例有助於將工作分成許多小塊。如果您需要更多的CPU,只需添加CPU即可。
所以,如果你有一個單一的系統,並且事實證明你的問題太大而不能適應內存(點2.2),你仍然可以從MapReduce可以很容易地將問題的一部分直接放到磁盤上這一事實中受益將被處理。
重要的事實是,如果您的問題足夠小以適應內存,並且足夠小以便在單個系統上處理,那麼專用(非MapReduce)解決方案可以快得多。
我打賭「單碟」是重點。我希望單個內核能夠在驅動器可以爲它們提供服務的情況下,對來自旋轉硬盤的字符執行'isspace(3)'。任何文件是否已經在緩衝區緩存中,因爲它們經常被使用? – sarnold
爲了讓它更有趣,我們可以說,我們在內存中有大量文件緩衝區。假設我們有16GB的RAM來存放文件,MapReduce作業使用這個緩衝區。 如果沒有磁盤延遲?如果所有數據都在RAM中? –
在這種情況下,我希望多個計算線程是值得的。 – sarnold