《Spark 官方文檔》硬件配置
硬件配置
Spark開發者們常常被問到的一個問題就是:如何為Spark配置硬件。我們通常會給出以下的建議,但具體的硬件配置還依賴於實際的使用情況。
存儲係統
因為絕大多數Spark作業都很可能是從外部存儲係統加載輸入數據(如:HDFS或者HBase),所以最好把Spark部署在離這些存儲比較近的地方。建議如下:
- 隻要有可能,就盡量在HDFS相同的節點上部署Spark。最簡單的方式就是,在HDFS相同的節點上獨立部署Spark(standalone mode cluster),並配置好Spark和Hadoop的內存和CPU占用,以避免互相幹擾(對Hadoop來說,相關的選項有 mapred.child.java.opts – 配置單個任務的內存,mapred.tasktracker.map.tasks.maximun和mapred.tasktracker.reduce.tasks.maximum – 配置任務個數)。當然,你也可以在一些通用的集群管理器上同時運行Hadoop和Spark,如:Mesos 或 Hadoop YARN。
- 如果不能將Spark和HDFS放在一起,那麼至少要將它們部署到同一局域網的節點中。
- 對於像HBase這類低延遲數據存儲來說,比起一味地避免存儲係統的互相幹擾,更需要關注的是將計算分布到不同節點上去。
本地磁盤
雖然大部分情況下,Spark都是在內存裏做計算,但它仍會使用本地磁盤存儲數據,如:存儲無法裝載進內存的RDD數據,存儲各個階段(stage)輸出的臨時文件。因此,我們建議每個節點上用4~8塊磁盤,非磁盤陣列方式掛載(隻需分開使用單獨掛載點即可)。在Linux中,掛載磁盤時使用 noatime
option 可以減少不必要的寫操作。在Spark中,配置(configure)spark.local.dir 屬性可指定Spark使用的本地磁盤目錄,其值可以是逗號分隔的列表以指定多個磁盤目錄。如果該節點上也有HDFS目錄,可以和HDFS共用同一個塊磁盤。
內存
一般來說,Spark可以在8GB~幾百GB內存的機器上運行得很好。不過,我們還是建議最多給Spark分配75%的內存,剩下的內存留給操作係統和係統緩存。
每次計算具體需要多少內存,取決於你的應用程序。如需評估你的應用程序在使用某個數據集時會占用多少內存,可以嚐試先加載一部分數據集,然後在Spark的監控UI(https://<driver-node>:4040)上查看其占用內存大小。需要注意的是,內存占用很大程度受存儲級別和序列化格式影響 – 更多內存優化建議,請參考調優指南(tuning guide)。
最後,還需要注意的是,Java虛擬機在200GB以上內存的機器上並非總是表現良好。如果你的單機內存大於200GB,建議在單個節點上啟動多個worker JVM。在Spark獨立部署模式下(standalone mode),你可在conf/spark-env.sh 中設置 SPARK_WORKER_INSTANCES 來配置單節點上worker個數,而且在該文件中你還可以通過 SPARK_WORKER_CORES 設置單個worker占用的CPU core個數。
網絡
以我們的經驗來說,如果數據能加載進內存,那麼多數Spark應用的瓶頸都是網絡帶寬。對這類應用,使用萬兆網(10 Gigabit)或者更強的網絡是最好的優化方式。對於一些包含有分布式歸約相關算子(distributed reduce相關算子,如:group-by係列,reduce-by係列以及SQL join係列)的應用尤其是如此。對於任何一個應用,你可以在監控UI (https://<driver-node>:4040
) 上查看Spark混洗跨網絡傳輸了多少數據量。
CPU Cores
Spark在單機幾十個CPU的機器上也能表現良好,因為Spark盡量減少了線程間共享的數據。但一般你至少需要單機8~16個CPU cores。當然,根據具體的計算量你可能需要更多的CPU,但是:一旦數據加載進內存,絕大多數應用的瓶頸要麼是CPU,要麼是網絡。
最後更新:2017-05-19 16:02:04
上一篇:
《Spark 官方文檔》Spark安全性
下一篇:
《用戶至上:用戶研究方法與實踐》導讀
三次渡劫,如何成就兩年150萬粉絲的皇冠店?
2011????????????????????????????????????????????????Java????????????-??????-????????????-?????????
解決遠程桌麵無法全屏的方法
Gridview後台添加滑動效果
Linq刪除中報錯——無法刪除尚未附加的實體
ListActivity+sqlite+SimpleCursorAdapter簡單實例
Using Container Service to Build WeChat Applets
Tomcat的設置4——Tomcat的體係結構與設置基於端口號的虛擬主機
magento -- 可配置產品的選項如何默認選中第一項
C# Show()與ShowDialog()的區別