1. 程式人生 > >Master原理剖析與原始碼分析:資源排程機制原始碼分析(schedule(),兩種資源排程演算法)

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