Spark stage切分和提交

2021-07-07 03:07:41 字數 1384 閱讀 5144

客戶端構建好rdd的dag以後,會提交至dagscheduler來處理,這是乙個stage級別的排程器,他首先會把作業切分為乙個個stage,每個stage由一組相同運算的tasks組成,然後會以taskset的形式提交給taskscheduler。ds還會跟蹤stage的輸出與物化情況、檢測task執行時的最優位置,重新提交失敗的stage。

dagsheduler接收到jobsubmitted的訊息後,進入作業提交邏輯

override def onreceive(event: dagschedulerevent): unit = event match  catch 

if (finalstage != null) else

}submitwaitingstages()

}

在rdd的依賴關係中,有兩種依賴:寬依賴和窄依賴,rdd遇到窄依賴會歸到乙個stage中,形成pipeline,遇到寬依賴則切分stage,通常有shuffle就會形成寬依賴,所以shuffle成了stage切分的邊界,newstage函式會生產stage的dag圖,該圖記錄了當前作業中各stage的依賴情況

private def newstage(

rdd: rdd[_],

numtasks: int,

shuffledep: option[shuffledependency[_, _, _]],

jobid: int,

callsite: callsite)

: stage =

獲取父stage的流程如下,注意visit函式,從該段邏輯中可以看出,只有碰到shuffle依賴才會切割stage

private def getparentstages(rdd: rdd[_], jobid: int): list[stage] = }}

}waitingforvisit.push(rdd)

//這裡會不停的向上遍歷

while (!waitingforvisit.isempty)

parents.tolist

}

下面是父stage,也就是shuffle stage的建立流程

private def getshufflemapstage(shuffledep: shuffledependency[_, _, _], jobid: int): stage = 

}

最終通過遞迴方式提交stage

private def submitstage(stage: stage)  else 

waitingstages += stage}}

} else

}

git切分支 提交

方法一 如果遠端分支已經存在,可以直接從當前分支切 git checkout 分支名 方法二 git checkout remote branch 在本地切換到遠端分支 首先切換到master 1 git checkout master 2 git fetch origin 3 git checko...

資料庫的垂直切分和水平切分

分類 資料庫技術 2013 04 08 22 39 664人閱讀收藏 舉報資料切分可以是物理上的,對資料通過一系列的切分規則將資料分布到不同的db伺服器上,通過路由規則路由訪問特定的資料庫,這樣一來每次訪問面對的就不是單台伺服器了,而是n臺伺服器,這樣就可以降低單台機器的負載壓力。數據切分也可以是資...

資料庫的垂直切分和水平切分

資料切分可以是物理上的,對資料通過一系列的切分規則將資料分布到不同的db伺服器上,通過路由規則路由訪問特定的資料庫,這樣一來每次訪問面對的就不是單台伺服器了,而是n臺伺服器,這樣就可以降低單台機器的負載壓力。數據切分也可以是資料庫內的,對資料通過一系列的切分規則,將資料分布到乙個資料庫的不同表中,比...