-
spark可以不進行任何配置,直接運行,這時候spark像一個java程序一樣,是直接運行在VM中的。
-
spark還支持提交任務到YARN管理的集群,稱為spark on yarn模式。
-
spark還支持Mesos管理的集群,Mesos和YARN一樣都是管理集群資源的。
-
另外spark自己提供了一種完整的集群管理模式,就是standalone模式。
這時候spark的運行不依賴於Hadoop YARN,需要配置$SPARK_HOME/conf/slaves文件指定從節點,然后用$SPARK_HOME/sbin/start-all.sh啟動spark集群管理服務。
standalone模式下
- master
負責整體的分配資源 ,不會進行計算,不用設置很大內存和核心數: - worker
負責從節點的資源分配,創建excutor。 - excutor
負責執行任務。
$SPARK_HOME/conf/spark-env.sh中配置項
-
SPARK_WORKER_CORES
每個worker能用cpu核心數,不配置默認為此節點所在機器的全部核心數。 -
SPARK_WORKER_MEMORY
每個worker最多能申請的內存 -
SPARK_WORKER_INSTANCES
本台機器能最多能運行的worker數量,默認為1,若設置為大於1則需要多次運行啟動worker命令才能啟動多個worker,此時每個worker可用最大核心數需要設置,否則若此機器上所有worker申請的核心數大於此機器物理核心數會報錯。(據說高版本spark支持一個worker上啟動多個executor,那樣的話這個選項就沒有存在意義了。未測試。)
默認情況,每個機器只有一個worker,提交一個spark應用,最多為每個worker分配一個executor。
每個spark應用最少會獨占一個core,若要同時提交多個spark應用,則所有應用占用的cores不能超過worker能申請的所有cores,否則會報錯。
spark應用可以在提交時通過--total-executor-cores參數指定用的總core數量。若不指定則會用光所有剩下的cores。
一個worker運行executor的數量不會超過同時提交的spark應用數量。
spark-submit參數
--executor-memory
每個executor分配內存,若超過worker可用剩余內存則不會提交給此worker,若不可提交給任意worker則報錯--driver-memory--driver-cores--total-executor-cores--class
對於spark on yarn模式沒有worker,因為是yarn來控制executor的。
