1. 程式人生 > >spark提交任務的模式—— standalone模式與yarn模式、資源排程與任務排程

spark提交任務的模式—— standalone模式與yarn模式、資源排程與任務排程

standalone模式

  1. 在客戶端提交Application,Driver在客戶端啟動;
  2. 客戶端向Master申請資源,Master返回Worker節點;
  3. Driver向Worker節點發送task,監控task執行,回收結果。

  1. 在客戶端提交Application,客戶端向Master申請啟動Driver;
  2. Master隨機在一臺Worker中啟動Driver;
  3. Driver啟動後,向Master申請資源,Master返回資源;
  4. Driver傳送task,監控task執行,回收結果。

綜上,Driver的功能:

  1. 傳送task;
  2. 監控task;
  3. 申請資源;
  4. 回收結果。

Yarn模式

Yarn與Standalone是平級關係,各自相互獨立。

修改spark-env.sh.template為spark-env.sh,新增export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop,使得spark找到yarn所需配置。

  1. 在客戶端提交Application,Driver在客戶端啟動;
  2. 客戶端向ResourceManager申請啟動ApplicationMaster(Driver);
  3. ResourceManager收到請求後,隨機在一臺NodeManager節點上啟動ApplicationMaster;
  4. ApplicationMaster啟動後,向ResourceManager申請資源,用於啟動Excutor;
  5. ResourceManager收到請求後,返回給ApplicationMaster一批NodeManager節點;
  6. ApplicationMaster連線NodeManager,啟動Excutor;
  7. Excutor啟動後,反向註冊給ApplicationMaster(Driver);
  8. ApplicationMaster(Driver)傳送task,監控task,回收結果。

  1. 在客戶端提交Application,客戶端向ResourceManager申請啟動ApplicationMaster;
  2. ResourceManager收到請求後,隨機在一臺NodeManager節點上啟動ApplicationMaster(Driver);
  3. ApplicationMaster啟動後,向ResourceManager申請資源,用於啟動Excutor;
  4. ResourceManager收到請求後,返回給ApplicationMaster一批NodeManager節點;
  5. ApplicationMaster連線NodeManager,啟動Excutor;
  6. Excutor啟動後,反向註冊給ApplicationMaster(Driver);
  7. ApplicationMaster(Driver)傳送task,監控task,回收結果。

綜上,ApplicationMaster(Driver)的功能:

  1. 申請資源;
  2. 啟動Excutor;
  3. 任務排程。

資源排程與任務排程

資源排程:

  1. 啟動叢集,Worker向Master彙報資源,Master掌握了叢集資源;
  2. 當new SparkContext時,建立兩個物件DAGScheduler和TaskScheduler;
  3. TaskScheduler向Master申請資源;
  4. Master收到請求後,找到滿足資源的Worker,啟動Excutor;
  5. Excutor啟動後,反向註冊給TaskScheduler,Driver掌握了一批計算資源;

務排程(接資源排程後):

  1. Application中有一個action運算元就有一個Job,Job中有RDD,RDD會形成DAG有向無環圖;
  2. DAGScheduler負責將每個Job中的DAG按照寬窄依賴切割成stage,將stage以TaskSet形式提交給TaskScheduler;
  3. TaskScheduler負責遍歷TaskSet,拿到一個個task,將task傳送到Excutor中的ThreadPool中執行;
  4. TaskScheduler監控task執行,回收結果;

綜上:

  1. TaskScheduler可以重試傳送失敗的task3次,如果依然失敗,由DAGScheduler重試stage,重試4次,如果依然失敗,則job失敗,Application失敗;
  2. TaskScheduler不僅可以重試失敗的task,而且可以重試執行緩慢的task,這是Spark中的推測執行機制,預設關閉,對於ETL業務場景要關閉;
  3. 如果遇到Application一直執行不完,考慮1)資料傾斜問題;2)推測執行是否開啟