spark部署所需硬體資源
-
儲存系統
由於大多數Spark作業可能必須從外部儲存系統(例如Hadoop檔案系統或HBase)讀取輸入資料,因此將其儘可能靠近此係統放置非常重要。我們建議如下:
-
如果可能的話,在與HDFS相同的節點上執行Spark。最簡單的方法是建立一個Spark 獨立模式叢集同一節點上,並配置Spark和Hadoop的記憶體和CPU的使用情況,以避免相互干擾(Hadoop的,相關的選項是
mapred.child.java.opts
為每個任務的記憶體和mapreduce.tasktracker.map.tasks.maximum
和mapreduce.tasktracker.reduce.tasks.maximum
-
如果無法做到這一點,請在與HDFS相同的區域網中的不同節點上執行Spark。
-
對於像HBase這樣的低延遲資料儲存,最好在不同於儲存系統的節點上執行計算作業以避免干擾。
-
記憶體
通常,Spark可以在每臺機器上執行8 GB到數百GB的記憶體。在所有情況下,我們建議僅為Spark分配最多75%的記憶體; 剩下的就是作業系統和緩衝區快取了。
您需要多少記憶體取決於您的應用程式。要確定應用程式對特定資料集大小的使用量,請在Spark RDD中載入資料集的一部分,並使用Spark監視UI(
http://<driver-node>:4040
最後,請注意Java VM並不總是表現出超過200 GB的RAM。如果購買RAM大於此值的計算機,則可以為每個節點執行多個工作JVM。在Spark的獨立模式下,您可以使用
SPARK_WORKER_INSTANCES
變數inconf/spark-env.sh
和每個worker的核心數設定每個節點的worker數SPARK_WORKER_CORES
。
-
本地磁碟
雖然Spark可以在記憶體中執行大量計算,但它仍然使用本地磁碟來儲存不適合RAM的資料,以及儲存各階段之間的中間輸出。我們建議每個節點有4-8個磁碟
noatime
選項安裝磁碟 以減少不必要的寫入。在Spark中,將 變數配置為spark.local.dir
以逗號分隔的本地磁碟列表。如果您正在執行HDFS,則可以使用與HDFS相同的磁碟。 -
網路
根據我們的經驗,當資料在記憶體中時,很多Spark應用程式都是網路繫結的。使用10千兆位或更高的網路是使這些應用程式更快的最佳方式。對於“分散式減少”應用程式尤其如此,例如分組,減少和SQL連線。在任何給定的應用程式中,您都可以從應用程式的監視UI(
http://<driver-node>:4040
)中檢視Spark在網路中的資料量。 -
CPU核心
Spark可以很好地擴充套件到每臺機器數十個CPU核心,因為它線上程之間執行的共享最少。您應該為每臺機器配置至少8-16個核心。根據工作負載的CPU成本,您可能還需要更多:一旦資料在記憶體中,大多數應用程式都受CPU或網路限制。
參考: