大多數Spark作業可能需要從外部存儲系統(例如 :Cassandra、Hadoop文件系統或HBase)讀取輸入數據,所以要讓Spark計算引擎盡可能靠近數據持久層。
如果使用HDFS作為數據存儲集群,可以在相同的集群上部署Spark集群,并配置Spark和Hadoop的內存和CPU使用率以避免干擾。我們的生產存儲使用的是Cassandra集群,spark master 服務單獨部署,其它節點同時部署:Cassandra + spark worker,保證spark worker 節點可以快速從本地讀取數據進行計算匯總。
雖然Spark可以在內存中執行大量的計算,但它仍然可能會使用本地磁盤來存儲不適用于RAM的數據,建議每個節點配置4-8個磁盤,不需要配置RAID(磁盤陣列),磁盤成本越來越低,可以考慮配置ssd 硬盤,可以大幅提升性能。另外;在Linux中,使用noatime選項掛載磁盤,以減少不必要的寫入操作。 在Spark中,可以將spark.local.dir變量配置為多個本地磁盤的地址,多個地址之間以逗號分隔。
建議為Spark分配的內存容量不大于機器總內存容量的75%;確保為操作系統和緩沖區留下足夠的內存。根據業務特點評估需要多少內存。
請注意,當內存容量超過200GB時Java 虛擬機的性能表現會不穩定。如果您購買的RAM大于200G,則可以為每個節點運行多個worker JVM。在Spark的standalone模式下,您可以通過conf/spark-env.sh中的SPARK_WORKER_INSTANCES變量設置每個節點運行的worker進程數,以及通過SPARK_WORKER_CORES變量設置每個worker可用的cpu核心數。
當數據已經存儲在內存中時,很多Spark應用程序的性能瓶頸在于網絡的傳輸速率。推薦最低使用10G的網絡。
Spark運行匯總計算任務比較多,推薦配置更多的cpu核數,性能提升還是比較明顯,推薦:每臺機器至少配置8-16個核??梢愿鶕park作業的CPU負載情況,進行配置調整。一旦數據已經在內存中,大多數應用程序的性能瓶頸在于CPU和網絡。
http://spark.apache.org/docs/latest/hardware-provisioning.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。