不多說,直接上干貨!
Spark任務調度
DAGScheduler
構建Stage—碰到shuffle就split
記錄哪個RDD 或者Stage 輸出被物化
重新提交shuffle 輸出丟失的stage
將Taskset 傳給底層調度器
本地性策略--- preferredLocations(p)
1.spark-cluster TaskScheduler 2.yarn-cluster YarnClusterScheduler 3.yarn-client YarnClientClusterScheduler
TaskScheduler
為每一個TaskSet 構建一個TaskSetManager 實例管理這個TaskSet 的生命周期
數據本地性決定每個Task 最佳位置(process-local, node-local, rack-local and then and any
提交taskset( 一組task) 到集群運行並監控
推測執行,碰到straggle 任務放到別的節點上重試
出現shuffle 輸出lost 要報告fetch failed 錯誤
ScheduleBacked
實現與底層資源調度系統的交互(YARN,mesos等)
配合TaskScheduler實現具體任務執行所需的資源分配(核心接口receiveOffers)
詳細過程
實例分析
val lines = ssc.textFile(args(1)) // 輸入 val words = lines.flatMap(x =>x.split(" ")) words.cache() // 緩存 val wordCounts = words.map(x =>(x, 1) ) val red = wordCounts.reduceByKey( (a,b)=>{a + b} , 8) red.saveAsTextFile(“/root/Desktop/out” , 8) // 行動