乙個 Spark 應用程式的完整執行流程

2022-07-10 21:03:11 字數 2294 閱讀 1583

2、打 jar 包,通過 spark-submit 提交執行

3、sparksubmit 提交執行

6、執行到 action 運算元,這個階段會產生 dag 血緣依賴關係,但是並沒有真正執行

7、執行 action 運算元,生成乙個 job 提交執行

8、dagscheduler 會對提交的 job 進行 stage 切分

9、taskschedule 通過 taskset 獲取 job 的所有 task,然後序列化分給 exector

....

shuffle

2、job:乙個 action 運算元就會生成乙個 job;

3、stage:stage 等於寬依賴的個數加 1;

4、task:乙個 stage 階段中,最後乙個 rdd 的分割槽個數就是 task 的個數。

以 sparkpi 程式舉例:reduce() 運算元就是提交 job 的入口

最後到:

dagscheduler.handlejobsubmitted(jobid, rdd, func, partitions, callsite, listener, properties)
從此,任務的提交就交給了 dagscheduler

入口:eventloop 中的 eventqueue.take() 方法

如果任務提交,則有 jobsubmitted 事件提交到 eventqueue 中,則 eventqueue.take() 阻塞返回,此時的 event 就是 jobsubmitted。

根據事件機制,跳轉到:dagscheduler.handlejobsubmitted()

兩個核心的方法:

// stage切分入口

finalstage = createresultstage(finalrdd, func, partitions, jobid, callsite)

// 提交stage執行入口

submitstage(finalstage)

方法依賴關係:

1、createresultstage(傳入finalrdd獲得resultstage) ->2

2、getorcreateparentstages(傳入rdd獲得父stage) ->3->4

3、getshuffledependencies(傳入rdd獲得寬依賴)

4、getorcreateshufflemapstage(傳入寬依賴獲得shufflemapstage) ->5->6

5、getmissingancestorshuffledependencies(傳入乙個rdd獲得所有寬依賴) ->3

6、createshufflemapstage(傳入寬依賴獲得shufflemapstage) ->2

入口:

taskscheduler.submittasks(new taskset(tasks.toarray, stage.id, stage.latestinfo.attemptnumber, jobid, properties))
backend.reviveoffers()
總結一下:

1、使用者編寫 spark 應用程式

2、達成jar包

3、通過spark-submit 提交執行

4、sparksessioin sparkcontext 初始化

5、執行action運算元

6、sparkcontext.runjob()

7、dagscheduler.handlejobsubmitted()

8、dagscheduler.runjob()

createresultstage() stage切分

submitstage()

9、taskscheduler.submittasks(new taskset())

10、schedulerbackend.reviveoffers();

11、driver傳送 launchtask 訊息給 executor

12、executor 就會封裝task 為乙個 taskrunner 物件,提交給該 executor 的執行緒池執行

13、executor 執行的task 有可能是 shufflemaptask,也有可能是resulttask

14、shufflemaptask 會後續的 shuffle操作,具體有 writer 完成

入口:

task.runtask()

從乙個應用程式挑到另乙個應用程式

背景 假如有a,b兩個程式 當然都得是你自己寫的 想在a程式中判斷b程式是否存在本機上,存在就啟動他,啟動的時候彈出乙個對話方塊,對話方塊的內容是a程式帶過去的。背景到此結束,下面是實現流程。實現 plain view plain copy 這個方法明白人一看就懂,你要是不懂還是先去看基礎教程吧!這...

乙個應用程式例項

在開發一些應用系統的時候,由於程式內在的一些特徵,系統的某些組成子程式只允許執行乙個應用程式例項,以保證業務和資料處理安全。本文將從實際應用角度來分析其實現原理,對三種實現方式進行測試比較,從而確定一種合適的實現方法。文章的例子使用c 語言進行描述。程序匹配 對於每乙個應用程式執行例項都會包含該例項...

spark應用程式的提交

spark 應用提交流程 spark master spark master core src main scala org apache spark deploy sparksubmit.scala override def main args array string unit override...