Hadoop框架在可用時會自動利用多個內核。您不必親自進行並行編程,而這實際上是Hadoop的賣點之一:您只需編寫一次作業而無需擔心線程同步邏輯,然後根據羣集的配置,它將盡可能使用所有核心。
例如,假設您有一個在多TB數據集上運行的作業,該數據集計算出分割後需要運行100個任務。現在,如果您想在10個小型節點(只有1個內核)上運行作業,那麼您的羣集將一次容納10個任務(每個節點有1個任務)。但是如果你想運行它,例如10個m1.large節點(2 x 2核心),你一次可以容納40個任務,所以你的工作比使用相同的工具快4倍m1.small的數量,因爲它會利用額外的核心。
此外,我聽說有人在Hadoop上使用CUDA(有些信息here),亞馬遜有一些集羣GPU實例,所以在這種情況下,您也可以利用GPU。
當使用Hadoop時,您應該根據內核數量推理,而不是機器數量。顯然你想找到一個好的折衷方案,我在過去看到過一個集羣,其中每個節點有很多內核,但磁盤I/O不是很好,所以這引起了集羣中的很多爭論,以減少每個節點的最大任務數量(您可以通過參數mapred.tasktracker.map.tasks.maximum
和mapred.tasktracker.reduce.tasks.maximum
控制Hadoop配置)。
我個人發現m1.xlarge實例在一些Hadoop集羣中工作得非常好,而高CPU的實例對我造成了太多的磁盤爭用。