Spark任務執行過程簡介
--executor-memory 每一個executor使用的記憶體大小
--total-executor-cores 整個application使用的核數
1.提交一個spark程式到spark叢集,會產生哪些程序?
SparkSubmit(也叫做Driver),主要作用是提交任務,也可以排程任務
Executor 用於執行需要計算的任務
2.在提交spark-submit任務的時候,已經用 --master指定了master節點,如果在提交任務的時候,該master宕機了,怎麼辦?
如果是高可用叢集,可以在--master後面可以指定多個master節點,寫法要注意: --master spark://hadoop101:7077,hadoop102:7077
提交任務可以指定多個master地址,目的是為了提交任務高可用
3.sc是spark core(RDD)的執行入口
4.spark任務執行流程
1).首先master啟動,然後workers啟動
workers首先跟master建立連線(進行註冊),進行RPC通訊,每個worker會把自己現有的記憶體跟核數彙報給master
master接收到workers彙報的資訊後,如果只有一個master,那麼這些資訊會被master儲存在記憶體,然後持久化到磁碟,如果有兩個(或多個)master, 則會將這些資訊持久化到zookeeper,用於做故障切換
2).master反饋給workers已經註冊成功,接下來workers會定時傳送心跳給master,目的是為了告訴master自己還活著,可以將任務分配給自己
3).當客戶端SparkSubmit(Driver)提交任務的時候,首先要跟master通訊,然後向master申請資源
master的功能就是負責資源排程,分配資源(就是指定 Executor啟動在哪些workers上),master資源分配的策略就是儘量讓任務執行在更多的機器上
4).master收到Driver的請求後,再去跟workers進行RPC通訊,讓worker啟動Executor (各個Executor會接收到資源引數)
5).Executor接下來會跟提交任務的Driver(通過master告訴worker,worker告訴Executor,進而Executor知道Driver的位置)進行通訊,因為真正的計算邏輯是在Driver端的,Driver端會將計算邏輯生成具體的任務(task),通過網路傳送給每一個Executor(每一個Executor可以接收並執行多個task任務),然後Executor會執行真正的計算邏輯