天天看點

《Spark 官方文檔》硬體配置硬體配置存儲系統本地磁盤記憶體網絡CPU Cores

spark開發者們常常被問到的一個問題就是:如何為spark配置硬體。我們通常會給出以下的建議,但具體的硬體配置還依賴于實際的使用情況。

因為絕大多數spark作業都很可能是從外部存儲系統加載輸入資料(如:hdfs或者hbase),是以最好把spark部署在離這些存儲比較近的地方。建議如下:

如果不能将spark和hdfs放在一起,那麼至少要将它們部署到同一區域網路的節點中。

對于像hbase這類低延遲資料存儲來說,比起一味地避免存儲系統的互相幹擾,更需要關注的是将計算分布到不同節點上去。

一般來說,spark可以在8gb~幾百gb記憶體的機器上運作得很好。不過,我們還是建議最多給spark配置設定75%的記憶體,剩下的記憶體留給作業系統和系統緩存。

以我們的經驗來說,如果資料能加載進記憶體,那麼多數spark應用的瓶頸都是網絡帶寬。對這類應用,使用萬兆網(10 gigabit)或者更強的網絡是最好的優化方式。對于一些包含有分布式歸約相關算子(distributed reduce相關算子,如:group-by系列,reduce-by系列以及sql join系列)的應用尤其是如此。對于任何一個應用,你可以在監控ui (<code>http://&lt;driver-node&gt;:4040</code>) 上檢視spark混洗跨網絡傳輸了多少資料量。

spark在單機幾十個cpu的機器上也能表現良好,因為spark盡量減少了線程間共享的資料。但一般你至少需要單機8~16個cpu cores。當然,根據具體的計算量你可能需要更多的cpu,但是:一旦資料加載進記憶體,絕大多數應用的瓶頸要麼是cpu,要麼是網絡。