Spark:部署和standalone配置調優
spark可以不進行任何配置,直接運作,這時候spark像一個java程式一樣,是直接運作在VM中的。
spark還支援送出任務到YARN管理的叢集,稱為spark on yarn模式。
spark還支援Mesos管理的叢集,Mesos和YARN一樣都是管理叢集資源的。
另外spark自己提供了一種完整的叢集管理模式,就是standalone模式。
這時候spark的運作不依賴于Hadoop YARN,需要配置<code>$SPARK_HOME/conf/slaves</code>檔案指定從節點,然後用<code>$SPARK_HOME/sbin/start-all.sh</code>啟動spark叢集管理服務。
master
負責整體的配置設定資源 ,不會進行計算,不用設定很大記憶體和核心數:
worker
負責從節點的資源配置設定,建立excutor。
excutor
負責執行任務。
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應用可以在送出時通過<code>--total-executor-cores</code>參數指定用的總core數量。若不指定則會用光所有剩下的cores。
一個worker運作executor的數量不會超過同時送出的spark應用數量。
<code>--executor-memory</code>
每個executor配置設定記憶體,若超過worker可用剩餘記憶體則不會送出給此worker,若不可送出給任意worker則報錯
<code>--driver-memory</code>
<code>--driver-cores</code>
<code>--total-executor-cores</code>
<code>--class</code>
對于spark on yarn模式沒有worker,因為是yarn來控制executor的。