Master原理剖析與原始碼分析:資源排程機制原始碼分析(schedule(),兩種資源排程演算法)
1、主備切換機制原理剖析與原始碼分析
2、註冊機制原理剖析與原始碼分析
3、狀態改變處理機制原始碼分析
4、資源排程機制原始碼分析(schedule(),兩種資源排程演算法)
*
- Driver的排程機制
*
//Master中的schedule()方法。
private def schedule(): Unit = {
//standby的Master是不會被呼叫的
if (state != RecoveryState.ALIVE) { return }
// 對註冊的worker進行過濾,留下Alive的worker。
val shuffledWorkers = Random.shuffle(workers) // Randomization helps balance drivers
//Driver 的排程機制
//首先排程Driver。只有在Yarn—cluster的模式提交下,才會註冊Driver。因為StandAlone和Yarn—client模式都會在本地直接啟動Driver,不會註冊Driver,當然也不可能讓Master來排程Driver了。
//只要有活著的workeru沒有被遍歷到就繼續遍歷。
//這個driver還沒有被啟動。
for (worker <- shuffledWorkers if worker.state == WorkerState.ALIVE) {
for (driver <- waitingDrivers) {
//如果當前這個worker的記憶體空閒量/cpu大於等於Driver需要的記憶體空閒量/cpu。
if (worker.memoryFree >= driver.desc.mem && worker.coresFree >= driver.desc.cores) {
//啟動Driver
launchDriver(worker, driver)
//將Driver從waitingDrivers中移除
waitingDrivers -= driver
}
}
}
startExecutorsOnWorkers()
}
//洗牌
def shuffle[T, CC[X ] <: TraversableOnce[X]](xs: CC[T])(implicit bf: CanBuildFrom[CC[T], T, CC[T]]): CC[T] = {
val buf = new ArrayBuffer[T] ++= xs
def swap(i1: Int, i2: Int) {
val tmp = buf(i1)
buf(i1) = buf(i2)
buf(i2) = tmp
}
//對集合的資料進行隨機打亂
for (n <- buf.length to 2 by -1) {
val k = nextInt(n)
swap(n - 1, k)
}
(bf(xs) ++= buf).result
//在某一個work上啟動Driver。
private def launchDriver(worker: WorkerInfo, driver: DriverInfo) {
logInfo("Launching driver " + driver.id + " on worker " + worker.id)
//將Driver加入到worker的快取中
//將Worker需要的使用的CPU和記憶體都加入到Driver需要的CPU和記憶體中
worker.addDriver(driver)
// 同時也把Work加入到Driver的快取結構了。
driver.worker = Some(worker)
//然後呼叫work兒的actor,把它傳送LaunchDriver訊息。讓worker來啟動Driver,並將Driver啟動為Running。
worker.endpoint.send(LaunchDriver(driver.id, driver.desc))
driver.state = DriverState.RUNNING
}
- Application的排程機制
相關推薦
Master原理剖析與原始碼分析:資源排程機制原始碼分析(schedule(),兩種資源排程演算法)
1、主備切換機制原理剖析與原始碼分析 2、註冊機制原理剖析與原始碼分析 3、狀態改變處理機制原始碼分析 4、資源排程機制原始碼分析(schedule(),兩種資源排程演算法) * Dri
Spark:Master原理剖析與原始碼分析
Master主備切換 Spark原生的standalone模式是支援主備切換的,也就是說master可以配置兩個,當Action Master因故障掛了的時候,系統會自動將Standby Master 切換成 Active Master。 Master的準備切換分為兩種:
資料結構實驗之棧與佇列五:下一較大值(一,二)
資料結構實驗之棧與佇列五:下一較大值(一,二) Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 對於包含n(1<=n<=1000)個整數的序列,對於序
作業系統:虛擬頁式儲存管理(缺頁中斷、頁面置換演算法)
1、基本工作原理 1、基本工作原理 在程序開始執行之前,不是全部裝入頁面,而是裝入一個或者零個頁面,之後根據程序執行的需要,動態裝入其他頁面;當記憶體已滿,而又需要裝入 新的頁面時,則根據某種演算法淘
Spark核心原始碼深度剖析:Master註冊機制原理剖析與原始碼分析
1.Master註冊機制原理剖析(圖解) 2.部分原始碼分析 master.scala中的Application註冊原理程式碼分析: case RegisterApplication(
Spark核心原始碼深度剖析:SparkContext原理剖析與原始碼分析
1.SparkContex原理剖析 1.圖解: 2.SparkContext原始碼分析 1.TaskScheduler建立: SparkContext.scala // Create and start the scheduler p
Spark:BlockManager原理剖析與原始碼分析
BlockManager是Spark的分散式儲存系統,與我們平常說的分散式儲存系統是有區別的,區別就是這個分散式儲存系統只會管理Block塊資料,它執行在所有節點上。BlockManager的結構是Maser-Slave架構,Master就是Driver上的BlockManagerMaste
Spark:Shuffle原理剖析與原始碼分析
spark中的Shuffle是非常重要的,shuffle不管在Hadoop中還是Spark中都是重重之重,特別是在Spark shuffle優化的時間。更是非常的重要。 普通shuffle操作的原理剖析(spark 2.x棄用) 每一個Job提交後都會生成一個ResultStage和
Spark:Task原理剖析與原始碼分析
在Spark中,一個應用程式要想被執行,肯定要經過以下的步驟: 從這個路線得知,最終一個job是依賴於分佈在叢集不同節點中的task,通過並行或者併發的執行來完成真正的工作。由此可見,一個個的分散式的task才是Spark的真正執行者。下面先來張task執行框架整體的對Spark的task
Spark:Executor原理剖析與原始碼分析
Executor原理示意圖 Executor程序的啟動 worker中為application啟動的executor,實際上是啟動的這個CoarseGrainedExecutorBackend程序. 原始碼分析: 第一步:CoarseGrainedExecutor
Spark:TaskScheduler原理剖析與原始碼分析
TaskScheduler是一個介面,DAGScheduler在提交TaskSet給底層排程器的時候是面向介面TaskScheduler。TaskSchduler的核心任務是提交Taskset到叢集運算並彙報結果 原始碼分析 第一步:TaskScheduler 提交tasks的入口 su
Spark:DAGScheduler原理剖析與原始碼分析
Job觸發流程原理與原始碼解析 wordcount案例解析,來分析Spark Job的觸發流程 程式碼:var linesRDD= sc.textFile('hdfs://') SparkContext中textFile方法 /** * hadoopFile方法呼叫會
Spark:Worker原理剖析與原始碼分析
解釋: Master要求Worker啟動Driver和Executor Worker啟動Driver的一個基本的原理,Worker會啟動一個執行緒DriverRunner,然後DriverRunner會去負責啟動Driver程序,然後在之後對Driver程序進行管理
Spark:SparkContext原理剖析與原始碼分析
在Spark中,SparkContext是Spark所有功能的一個入口,你無論是用java、scala,甚至是python編寫都必須要有一個SparkContext,它的主要作用,包括初始化Spark應用程式所需的一些核心元件,包括 排程器(DAGSchedule、TaskScheduler
DAGScheduler原理剖析與原始碼分析
stage劃分演算法:必須對stage劃分演算法很清晰,知道自己的Application被劃分了幾個job,每個job被劃分了幾個stage,每個stage有哪些程式碼,只能在線上報錯的資訊上更快的發現問題或者效能調優。 //DAGscheduler的jo
job觸發流程原理剖析與原始碼分析
以wordcount流程解析 val lines = sc.textFile() def textFile( path: String, minPartitions:
分享《深入淺出深度學習:原理剖析與python實踐》PDF+源代碼
img color fff png aid pdf ffffff pytho 下載 下載:https://pan.baidu.com/s/1H4N0W5sPOE7YlK0KyC7TZQ 更多資料分享:http://blog.51cto.com/3215120 《深入淺出深度
《深入淺出深度學習:原理剖析與python實踐》pdf 下載
深入淺出深度學習:原理剖析與Python實踐》介紹了深度學習相關的原理與應用,全書共分為三大部分,第一部分主要回顧了深度學習的發展歷史,以及Theano的使用;第二部分詳細講解了與深度學習相關的基礎知識,包括線性代數、概率論、概率圖模型、機器學習和至優化演算法;在第三部分中,針對若干核心的深度
課時17 第三課Spark內部原理剖析與原始碼閱讀(五)
為何spark shuffle比mapreduce shuffle慢? 主要是spark shuffle的shuffle read階段還不夠優秀,它是基於hashmap實現的,shuffle read會把shuffel write階段已經排序資料給重新轉成亂序的,轉成亂序之後又做了排序,導致非常低效,sp
NIO原理剖析與Netty初步----淺談高性能服務器開發(一)
返回 創建 基於 register 訪問 io操作 nbsp info class 除特別註明外,本站所有文章均為原創,轉載請註明地址 在博主不長的工作經歷中,NIO用的並不多,由於使用原生的Java NIO編程的復雜性,大多數時候我們會選擇Netty,m