• 沒有找到結果。

In Memory Scheduler 演算法

第三章 研究方法與成果

3.2 In Memory Scheduler 演算法

原先 Spark 的排程演算法是隨機分配且不會重複分配連續兩個 task 到 相同 worker,若 worker 上有可執行 task 的 CPU 就會分配 task 去執行,原 先的排程方式會導致 task 分散到四處的機器上去執行,造成機器之間的 communication time 過久,導致整體執行時間拉長,且若是租借機器來運 算的使用者,會導致每台機器的使用效益不高,租借的成本提升,故為了 解決上述的問題,本篇論文提出一個新的排程演算法稱為 In Memory Scheduler(IMS)演算法。

In-Memory Scheduler 的演算法是基於虛擬機所擁有的可用 CPU 數目、

記憶體大小以及 CPU 時脈進行 Task 排程,目標為將大部分的工作集中在 效能較佳的機器上執行,並且降低 Task 彼此之間的 communication time 以及節省運算成本,最終可達成有效分配運算資源以及縮短執行時間的效

傳入 Spark 的資料將會被切成每個大小相同的 partitions,一個 partitions 相當為一個 Task,故每個 Task 的大小都相同,若第一個 Task 所需求的記 憶體大於可用機器的最大記憶體,就表示全部 Task 的需求都大於可用機器 的最大記憶體,根本無法執行這個程式,故在一開始啟動 spark 就會發現 沒有足夠資源可供執行而將此應用程式關閉。

36

Algorithm:In-Memory Scheduler Input:list

Output:executor index

1、 Put SparkContext into SortedlistBackend to find the executor with specific factors and sort the executors based on Total available CPUs, Memory and CPU Clock Rate.

2 、 Store the sorted list in descending order by Total available CPUs, Maximum Usable Memory and Highest CPU Clock Rate.

3、 Get executor index in shuffle offers by sorted list 4、 Submit tasks to the specific executor by executor index 5、If (submit all tasks to executors)

Exit 經排序好的 list 比對 executor index。第四步使用已經排序後的機器順序分 配 task 到 executor 上面。第五步若所有的 task 都分配完畢就離開 IMS 演算 法,若還沒分配完畢就跳回第一步驟繼續往下執行,圖 3-7 為 IMS 演算法 之執行流程圖。

37

圖 3-7 1.IMS Algorithm flow chart

圖 3-8 運用 IMS 演算法之整體系統流程圖

38 Task 較分散,會造成機器之間擁有較長的 communication time 和每台機器 上有 CPU 閒置的問題,IMS 演算法依照可用 CPU 個數、記憶體大小和 CPU

表 3-2 Configuration of Virtual Machines

Size Memory VCPU Disk

39

Core1 Core2 Core3 Core4 Core5 Core6 Core7 Core8 Worker1 Task15 Task16

Worker2 Task13 Task14

Worker3 Task9 Task10 Task11 Task12

Worker4 Task1 Task2 Task3 Task4 Task5 Task6 Task7 Task8 圖 3-9 IMS scheduling results

Core1 Core2 Core3 Core4 Core5 Core6 Core7 Core8 Worker1 Task1 Task6

Worker2 Task4 Task7

Worker3 Task2 Task5 Task9 Task11

Worker4 Task3 Task8 Task10 Task12 Task13 Task14 Task15 Task16 圖 3-10 Original Spark scheduling results

40 將 disk 暫時充當記憶體容量來輔助計算。WordCount 是一個計算文字檔案 中有多少個字的應用程式,我們修改 WordCount 這個應用程式加入 join 的 指令,使得其內部的結構具有相依性。K-means[20]是一種分類資料點是否 聚集在一起的方式,基本精神就是物以類聚的概念去執行,給予一組資料,

將之分類為 k 類(k 值由使用者設定),主要目標在於將大量的資料點中找出 具有代表性的資料點,這些資料點可被稱為群中心(cluster centers)、代表點 (prototypes)、code words 等,然後再根據這些群中心去進行後續的處理,

包括資料壓縮或資料分類。PageRank[5]指的是網頁排名,又被稱為網頁級 別、Google 左側排名等,是一種由搜尋引擎根據網頁之間相互的超連結計 算的技術,其計算方式是計算各網頁的被連結數,因為超連結可被認為是 對被連結網站的信任投票,因此得票數越高的網站可以被推測其內容越重 要, 值 得 被排 序 在 前面 。PageRank 的運算公式被定義為 一個網站的 PageRank 值,來自於加總所有連結到該網站的網站之 PageRank 值除以本 身的導出連結數。

圖 4-1 為雲端系統之軟體架構圖,我們使用 Ubuntu 12.04 為 Operating System,使用 Openstack 來創建虛擬機,並於虛擬機安裝 hadoop 2.2.0 以及

相關文件