1. 程式人生 > >Zeppelin 原始碼分析-排程和資源分析(2)

Zeppelin 原始碼分析-排程和資源分析(2)

Scheduler 類

Scheduler 類是排程類的抽象類,其中定義了很多關鍵方法,比如 submit 方法等,並且是一個執行緒類,一直執行在主程序或者獨立 JVM 程序。

RemoteScheduler 類

RemoteScheduler 類是執行在主程序的排程類,支援併發操作,實現的方式就是之前說過的將 Job 封裝成 RemoteScheduler.JobRunner 類,RemoteScheduler 中維護兩個佇列,queue 用於儲存所有的需要執行的 Job,running 用於儲存正在執行的 Job,由於該類在主程序,所有同一時間可能會有多個直譯器 JVM 中的 Job 正在執行,所以 running 是一個佇列,在 FIFOScheduler 中,該屬性其實就是一個物件,因為先進先出排程同一時間只能有一個正在執行的 Job 類的物件:

List<Job> queue = new LinkedList<>();
List<Job> running = new LinkedList<>();

該執行緒中 run 方法流程如下:
首先當正在執行的 Job 總數大於閾值或者任務 queue 是空的時候,等待 0.5s ,其他情況下從佇列中取出一個 Job 並加入到 running 佇列中:

synchronized (queue) {
  if (running.size() >= maxConcurrency || queue.isEmpty() == true
) { try { queue.wait(500); } catch (InterruptedException e) { logger.error("Exception in RemoteScheduler while run queue.wait", e); } continue; } job = queue.remove(0); running.add(job); }

然後對 job 封裝成 JobRunner 的物件 jobRunner,封裝原因在 Job 相關類中說過,封裝之後直接將 jobRunner 直接扔到 Java 自帶的執行緒池執行:

Scheduler scheduler = this;
JobRunner jobRunner = new JobRunner(scheduler, job);
executor.execute(jobRunner);

一旦該 job 被提交到直譯器 JVM,則進行下一次迴圈,重複以上步驟。

ParallelScheduler 類

這個類是執行在直譯器 JVM 中的排程類,支援併發 Job,實現的方式是 Job 封裝成 ParallelScheduler.JobRunner 類,程式碼基本和 RemoteScheduler 相似,這裡不再贅述。

FIFOScheduler 類

這個類也是執行在直譯器 JVM 中的排程類,只不過不支援併發,由於比較簡單,這裡不再贅述。

SchedulerListener 類

SchedulerListener 介面中定義了兩個方法,jobStarted 和 jobFinished 方法,它唯一的實現類是 SchedulerFactory 類,實現類中這兩個方法都是向日志中輸出一句話。

SchedulerFactory 類

這個類是建立各種排程的工廠類,呼叫 reateOrGetXXXScheduler 的時候,返回的已經是在執行的執行緒了:

public Scheduler createOrGetFIFOScheduler(String name) {
  synchronized (schedulers) {
    if (schedulers.containsKey(name) == false) {
      Scheduler s = new FIFOScheduler(name, executor, this);
      schedulers.put(name, s);
      executor.execute(s);
    }
    return schedulers.get(name);
  }
}

Java 執行緒池參考資料

相關推薦

Zeppelin 原始碼分析-排程資源分析2

Scheduler 類 Scheduler 類是排程類的抽象類,其中定義了很多關鍵方法,比如 submit 方法等,並且是一個執行緒類,一直執行在主程序或者獨立 JVM 程序。 RemoteScheduler 類 RemoteScheduler

原始碼分析篇--Java集合操作2

4、兩大集合介面 在Java集合中,有兩大集合,一個是Collection介面及其實現類,另一個是Map介面及其實現類。下面給出這兩種集合的框架圖。如下所示。 4.1Collection介面框架圖 4.2Map介面框架圖 從上面兩個框架圖可以看出,Cllection介面和Map介面是

文字內容分析智慧反饋2- 資料預處理按緯度統計

書接上文,考慮4個核心功能的實現,先考慮:資料預處理和按緯度統計。 1、資料預處理 1.1、基本原則 首先,考慮資料的格式。 業務資料是儲存在關係型資料庫中的。資料分析的部分,我們將使用Weka,雖然Weka習慣ARFF格式,為了實現資料分析和提取的

LevelDB原始碼分析之六:skiplist2

閱讀本文可參考: LevelDB中的skiplist實現方式基本上和中的實現方式類似。它向外暴露介面非常簡單,如下: public: // Create a new SkipList object that will use "cmp" for compar

JavaScript案例分析:圖片庫改進版2

1.優化      showPic函式中裡仍存在一些需要處理的假設     ①檢查title屬性是否存在,可以測試它是否為null var text=whichpic.getAttribute("title")?whichpic.get

劉軍《社會網路分析導論》閱讀筆記2---第五章

第五章 中心性——權力的量化分析 中心度和中心勢 點度中心度(區域性性的) 點度中心度是區域性性的中心!! 絕對點度中心度:點度中心度就是該點的度數。 相對點度中心度 無向圖中某點的相對點度中心度:該點的度數/(圖中點總數-1) 有向圖中某點的相對點度

Python資料分析與挖掘學習筆記2使用pandas進行資料匯入

一、匯入pandas模組:   import pandas as pda 二、匯入CSV格式資料: #資料匯入 i=pda.read_csv("E:/hexun.csv")     可對匯入的資料進行統計以及按列排序: #統計 i.describe() #排序 i

oracle分析函式row_number() over()使用2

row_number() over ([partition by col1] order by col2) ) as 別名表示根據col1分組,在分組內部根據 col2排序而這個“別名”的值就表示每組內部排序後的順序編號(組內連續的唯一的),[partition by col1] 可省略。 以Scott/ti

深入分析Java Web技術內幕2java的I/O的工作機制

1、背景      當前這個 海量資料時代,資料在網路中隨處流動,流動的過程都涉及I/O問題,可以說大部分web應用系統的瓶頸都是I/O瓶頸。2、i/o是什麼     1】 是input和output的簡寫,i/o操作主要是指使用java進行輸入輸出操作,java所有的i/o

C# 《四》表達式運算符2

技術分享 -a 按位運算 表達式 其他 img 數學 tro .cn 1、位運算符 1、位(bit):在計算中存儲所有數據都采用二進制,那麽二進制的位,便是我們所說的 bit。 1)1Byte = 8bit 1字節 = 8位 2)1k =10

第11課 std::bindstd::function2_std::bind綁定器

pan std name iostream emf end cnblogs left eid 1. 溫故知新:std::bind1st和std::bind2nd (1)bind1st、bind2nd首先它們都是函數模板,用於將參數綁定到可調用對象(如函數、仿函數等)的第1個

《Python基礎教程》第二章:列表元組2

ber 次數 eve sorted 反向 bsp del 對象 復制 list函數可以將字符串轉換為列表 ‘ ‘.join(somelist)可以將列表轉換為字符串 從列表中刪除元素可以使用del語句來實現 方法是與對象有緊密聯系的函數:對象.方法(參數) append方

隊列2

實現 放置 怎麽 事情 棧操作 ron bsp 使用 alt 一、題目:僅用遞歸函數和棧操作逆序一個棧 將一個棧裏面的元素逆序,只能用遞歸函數來實現,不能用其他數據結構。 只能用遞歸函數來實現 可以使用現成的棧類型 思路: 為了將棧逆序,只需要按順序將棧頂至棧底的元素拿

Android的資源引用2Drawable)

一、Drawable資源通常存放在/res/drawable目錄下面。 二、圖片資源 圖片資源是最簡單的Drawable資源.只要把*.png,*.jpg,*.gif 等格式的圖片放入目錄下面就可以使用,Android SDK會在編譯時自動載入圖片,並在R資源清單中生成索引。 在java

Python語言資料結構語言結構2

1. Python預備基礎 變數的命名 變數命名規則主要有以下幾條: 變數名只能包含字母、數字和下劃線,其中下劃線和字母可以開頭,數字不行,即info_1可以,而1_info不行; 變數名內不能包含空格,可以用下劃線替代,即info_1,而非info 1; 不能與Pyt

第三章 處理機排程與死鎖2

四、產生死鎖的原因和必要條件 死鎖(Deadlock):指程序之間無休止地互相等待 飢餓(Starvation):指一個程序無休止地等待 產生死鎖的原因: 1.競爭資源。 系統中供多個程序共享的資源如印表機、公用佇列等的數目不滿足需要時,會引起資源競爭而產生死鎖。 可把系統中的資源分為兩

Google guava cache原始碼解析1--構建快取器2

此文已由作者趙計剛授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 CacheBuilder-->maximumSize(long size)     /**      * 

C#基礎系列:委託設計模式2

前言:這篇打算從設計模式的角度去解析下委託的使用。我們知道使用委託可以實現物件行為(方法)的動態繫結,從而提高設計的靈活性。上次說過,方法可以理解為委託的例項,站在方法的層面,委託例項的一個非常有用的特性是它既不知道,也不關心其封裝方法所屬類的詳細資訊,對它來說最重

Android火車票訂購軟體之註冊檔案儲存2

上次我們做了app啟動時的延時頁,這次我們來做登陸註冊的頁面。 xml程式碼: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.c

基於TensorFlow的Cats vs. Dogs貓狗大戰實現詳解2

2. 卷積神經網路模型的構造——model.py   關於神經網路模型不想說太多,視訊中使用的模型是仿照TensorFlow的官方例程cifar-10的網路結構來寫的。就是兩個卷積層(每個卷積層後加一個池化層),兩個全連線層,最後一個softmax