spark提交任務的模式—— standalone模式與yarn模式、資源排程與任務排程
阿新 • • 發佈:2019-01-03
standalone模式
- 在客戶端提交Application,Driver在客戶端啟動;
- 客戶端向Master申請資源,Master返回Worker節點;
- Driver向Worker節點發送task,監控task執行,回收結果。
- 在客戶端提交Application,客戶端向Master申請啟動Driver;
- Master隨機在一臺Worker中啟動Driver;
- Driver啟動後,向Master申請資源,Master返回資源;
- Driver傳送task,監控task執行,回收結果。
綜上,Driver的功能:
- 傳送task;
- 監控task;
- 申請資源;
- 回收結果。
Yarn模式
Yarn與Standalone是平級關係,各自相互獨立。
修改spark-env.sh.template為spark-env.sh,新增export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop,使得spark找到yarn所需配置。
- 在客戶端提交Application,Driver在客戶端啟動;
- 客戶端向ResourceManager申請啟動ApplicationMaster(Driver);
- ResourceManager收到請求後,隨機在一臺NodeManager節點上啟動ApplicationMaster;
- ApplicationMaster啟動後,向ResourceManager申請資源,用於啟動Excutor;
- ResourceManager收到請求後,返回給ApplicationMaster一批NodeManager節點;
- ApplicationMaster連線NodeManager,啟動Excutor;
- Excutor啟動後,反向註冊給ApplicationMaster(Driver);
- ApplicationMaster(Driver)傳送task,監控task,回收結果。
- 在客戶端提交Application,客戶端向ResourceManager申請啟動ApplicationMaster;
- ResourceManager收到請求後,隨機在一臺NodeManager節點上啟動ApplicationMaster(Driver);
- ApplicationMaster啟動後,向ResourceManager申請資源,用於啟動Excutor;
- ResourceManager收到請求後,返回給ApplicationMaster一批NodeManager節點;
- ApplicationMaster連線NodeManager,啟動Excutor;
- Excutor啟動後,反向註冊給ApplicationMaster(Driver);
- ApplicationMaster(Driver)傳送task,監控task,回收結果。
綜上,ApplicationMaster(Driver)的功能:
- 申請資源;
- 啟動Excutor;
- 任務排程。
資源排程與任務排程
資源排程:
- 啟動叢集,Worker向Master彙報資源,Master掌握了叢集資源;
- 當new SparkContext時,建立兩個物件DAGScheduler和TaskScheduler;
- TaskScheduler向Master申請資源;
- Master收到請求後,找到滿足資源的Worker,啟動Excutor;
- Excutor啟動後,反向註冊給TaskScheduler,Driver掌握了一批計算資源;
務排程(接資源排程後):
- Application中有一個action運算元就有一個Job,Job中有RDD,RDD會形成DAG有向無環圖;
- DAGScheduler負責將每個Job中的DAG按照寬窄依賴切割成stage,將stage以TaskSet形式提交給TaskScheduler;
- TaskScheduler負責遍歷TaskSet,拿到一個個task,將task傳送到Excutor中的ThreadPool中執行;
- TaskScheduler監控task執行,回收結果;
綜上:
- TaskScheduler可以重試傳送失敗的task3次,如果依然失敗,由DAGScheduler重試stage,重試4次,如果依然失敗,則job失敗,Application失敗;
- TaskScheduler不僅可以重試失敗的task,而且可以重試執行緩慢的task,這是Spark中的推測執行機制,預設關閉,對於ETL業務場景要關閉;
- 如果遇到Application一直執行不完,考慮1)資料傾斜問題;2)推測執行是否開啟