Spark-任務執行流程
阿新 • • 發佈:2018-12-22
目錄
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上,這樣各個節點才能並行的快速的下載。