客戶端構建好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臺伺服器,這樣就可以降低單台機器的負載壓力。數據切分也可以是資料庫內的,對資料通過一系列的切分規則,將資料分布到乙個資料庫的不同表中,比...