Spark里的DAG是怎麼回事?
01-21
DagScheduler原理?清晰解釋下?
沒看代碼,無責任預估:不就是作業拓撲嗎?每一個操作生成一個rdd,rdd之間連一條邊,最後這些rdd和他們之間的邊組成一個有向無環圖,就是這個dag。
不只是spark,現在很多計算引擎都是dag模型的,例如tez就是mr的dag改進。
在Spark作業調度系統中,調度的前提是判斷多個作業任務的依賴關係,這些作業任務之間可能存在因果的依賴關係,也就是說有些任務必須先獲得執行,然後相關的依賴任務才能執行,但是任務之間顯然不應出現任何直接或間接的循環依賴關係,所以本質上這種關係適合用DAG表示。
DAGscheduler簡單來說就是負責任務的邏輯調度,負責將作業拆分成不同階段的具有依賴關係的多批任務。
DAGscheduler最重要的任務之一就是計算作業和任務的依賴關係,制定調度邏輯。參考:《Spark大數據處理技術》
spark中rdd經過若干次transform操作,由於transform操作是lazy的,因此,當rdd進行action操作時,rdd間的轉換關係也會被提交上去,得到rdd內部的依賴關係,進而根據依賴,劃分出不同的stage。DAG是有向無環圖,一般用來描述任務之間的先後關係,spark中的DAG就是rdd內部的轉換關係,這些轉換關係會被轉換成依賴關係,進而被劃分成不同階段,從而描繪出任務的先後順序。去年年底看了1.0.2的源碼,手邊沒有當時的筆記,可能存在不準確的地方。----------我回學校翻翻筆記,再修改答案吧,幫你邀請一下大牛
就是有方向,沒有環,的一個圖。。。
樓上諸位回答的很詳細了,Spark之所以outperform Hadoop的關鍵有二:DAG scheduler和intermediate data in memory。Hadoop用的是AG而不是DAG。一個DAG可以包含多個AG。DAG除了可以提升scheduler效率之外,它同時是Spark Fault tolerance機制-Lineage 追溯的基礎。這些細節在Matei的那篇關於RDD的paper裡面講得非常清楚(樓上有提過)。
spark的DagScheduler負責將job劃分成Stage,Stage的劃分依據就是ShuffleDependency。spark一共兩種Stage,一種是ShuffleMapStage,一種ResultStage。每個job可以有多個或者0個ShuffleMapStage,但是有且只有一個ResultStage。然後根據Stage的依賴關係生成對應的tasks,再然後通過TaskScheduler對tasks進行調度並通知對應的Executor執行。
DAG 好處很多,很多系統都是DAG,tf,mxnet
rdd們串起來了,形成了一個有向無環圖。
推薦閱讀:
※Spark比Hadoop的優勢有這麼大嗎?
※Scala 在大數據處理方面有何優勢?
※如何看待類似Spark亞太研究院的王家林打著開源旗號賺錢的行為?
※如何評價spark的機器學習框架 和 tensorflow的機器學習系統?