1. 程式人生 > >Spark-任務執行流程

Spark-任務執行流程

目錄

Application在叢集中執行的大概流程

在這裡插入圖片描述
流程:

1.Driver分發task到資料所在的節點上執行。
	計算找資料,減少網路IO
2.每一個任務的執行結果拉回到Driver程序中
	這種操作很危險,容易導致Driver端OOM。可以通過程式碼控制是否將計算結果拉回到Driver端

Driver的作用:

1.分發任務到計算節點執行
2.監控task(thread)的執行情況
3.如果task失敗,會重新發送(有次數限制)
4.可以將計算結果拉回到Driver程序

結論:Driver會和叢集頻繁通訊

Application提交的方式

client提交方式 cluster提交方式
Driver程序 在client端節點啟動 在叢集中隨機一臺Worker節點上啟動
提交命令 spark-submit --master spark://node01:7077 --class className jarPath args spark-submit --master spark://node01:7077 --deploy-mode cluster --class className jarPath args
適應場景 測試環境 生產環境
結果 客戶端節點能夠看見 去Worker節點檢視(可以直接在WORKER_DIR目錄下檢視,也可以通過網頁檢視)

注意:className jarPath args根據程式碼、jar包位置、引數自己填寫
Q:為什麼cluster方式適合生產環境?
A:每一次提交Application導致某一臺Driver程序所在的節點網絡卡流量激增問題是無法解決的,但是可以解決的是,如果提交1w個Application,讓這1w次網絡卡流量激增問題分散到叢集的各個節點上。

Application提交的叢集

Spark叢集 Yarn叢集
依賴叢集 HDFS叢集、Spark叢集、Zookeeper叢集 HDFS叢集、Yarn叢集、Zookeeper叢集
提交命令 spark-submit --master spark://node01:7077 --class jarPath args spark-submit --master yarn --class jarPath args
配置檔案 不需要改變 在spark-env.sh中新增HADOOP_CONF_DIR的路徑:$HADOOP_HOME/etc/hadoop

Q:Spark App 提交到yarn叢集上,需要啟動standalone叢集嗎?
A:不需要,甚至可以叢集中可以沒有spark安裝包。但是,client端必須要有spark安裝包,因為提交Application的時候需要用到spark-submit命令。

Q:Spark App提交到yarn叢集,為什麼需要配置HADOOP_CONF_DIR選項?
A:Application提交的時候可以通過HADOOP_CONF_DIR拿到yarn-site.xml配置檔案,解析獲得Resourcemanager的URL,就可以申請資源了。

Q:將Application提交到Yarn叢集上,為什麼必須要啟動HDFS叢集?
A:因為提交Application的時候需要先將jar上傳到HDFS上,這樣各個節點才能並行的快速的下載。