【Spark學習】Apache Spark集群硬件配置要求


Spark版本:1.1.1

本文系從官方文檔翻譯而來,轉載請尊重譯者的工作,注明以下鏈接:

http://www.cnblogs.com/zhangningbo/p/4135912.html 

 

目錄


 

  • 存儲系統
  • 本地磁盤
  • 內存
  • 網絡
  • CPU核數

 

 

      Spark開發人員收到的最常見的問題就是如何為Spark做硬件配置。然而恰當的硬件配置取決於你的應用環境,所以我們推薦考慮如下幾個要素。

 

存儲系統


 

  因為大部分Spark作業很可能要從外部存儲系統(如HDFS、HBase)讀取數據,所以,把Spark平台盡可能地部署在靠近這類存儲系統的地方是很重要的。我們推薦從以下幾個方面考慮Spark的部署:

  • 如果有可能,那么就把Spark與HDFS運行在相同的節點上。最簡單的方法就是在HDFS的節點上直接創建Spark Standalone集群,同時分別配置Spark和Hadoop對於內存和CPU的使用量以避免相互干擾(對於Hadoop,相關選項如:mapred.child.java.opts用於設置每個任務需要分配的內存量,mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum用於設置任務總數)。要不然,你還可以在通用集群管理器(比如Mesos或Hadoop YARN)上運行Hadoop和Spark。
  • 如果不可能,那么就在HDFS所在的局域網內的其他節點上運行Spark。
  • 對於HBase這樣的低延遲數據庫存儲系統,最好是在存儲系統以外的其他節點上運行計算作業,以避免干擾。

 

本地磁盤


 

  當Spark在內存中執行大量的計算作業時,實際上它仍然會使用本地磁盤來存儲那些不適合放入RAM中的數據,還有那些在各個stage之間保存的臨時輸出數據。我們推薦每個節點配備4-8個磁盤,且不要設置為RAID模式(僅僅是作為單獨的裝載點)。在Linux系統下,以noatime命令行選項裝載磁盤可以減少不必要的讀磁盤操作。在Spark中,把變量spark.local.dir配置為以逗號分隔的本地磁盤列表。如果你正在運行着HDFS,那么,最好和HDFS使用相同的磁盤。

 

內存


 

  通常,在內存容量為8GB到數百GB的主機上,Spark都能很好地運行。在任何情況下,我們都推薦最多只把物理主機上75%的內存分配給Spark;剩下的留給操作系統和緩存。

  你需要多少內存取決於你的應用程序。要確定你的應用程序在某個數據集上執行時需要多少內存,可以在Spark RDD中加載一部分數據集,並借用Spark 監控UI(http://<driver-node>:4040)上的存儲表格(Storage tab)來查看其內存用量。要注意的是內存用量受存儲級別和序列化格式的影響極大——解決方法詳見Spark調優一文。

  最后,請注意,配置了200GB以上內存的Java 虛擬機並不能總是正常工作。如果你購買的主機配備的內存超過了這個數值,那么可以在每個主機上啟動多個worker JVM來解決這個問題。在Spark Standalone集群上,你可以使用配置文件conf/spark-env.sh中的變量SPARK_WORKER_INSTANCES來設置每個節點上的worker數量,用變量SPARK_WORKER_CORES來設置每個worker上分配的CPU核數。

 

網絡


 

  我們的經驗表明,當數據加載到內存時,大多數Spark應用程序都將受制於網絡。最好的辦法就是使用10Gbps或更高帶寬的網絡來加快應用的執行速度。這個辦法對於那些分布式reduce應用程序(如group-bys,reduce-bys,及SQL joins)特別有用。在任何一個應用程序中,你都可以從其監控UI(http://<driver-node>:4040)上看到Spark通過網絡傳輸了多少數據量。

 

CPU核數


 

  Spark可以在每個主機上很好地縮放數十個CPU核,因為它在線程間極少共享信息。你很可能會在每台主機上最少配置8-16個CPU核。根據你的工作負載所需的CPU成本,你可能還需要更多的CPU核:因為一旦把數據都加載到內存,那么大多數應用程序的瓶頸要么在於CPU,要么在於網絡。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM