一種于Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種于Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的方法及系統(tǒng),包括:步驟10,持續(xù)獲取節(jié)點中運行的任務的執(zhí)行速率;步驟20,計算執(zhí)行速率在下降的任務的個數(shù);步驟30,根據(jù)該個數(shù)判斷是否需要調(diào)整節(jié)點中所運行的任務的數(shù)目。本發(fā)明自動的調(diào)整節(jié)點上運行的任務數(shù)目,以使Hadoop平臺體現(xiàn)出較高的任務執(zhí)行效率。使用感知節(jié)點的計算能力、任務執(zhí)行狀態(tài)實現(xiàn)動態(tài)調(diào)整Slots數(shù)目,有效的感知了集群和作業(yè)的異構性。實現(xiàn)集群運行任何異構性的作業(yè)或者作業(yè)運行在任何異構性的集群中都能使Hadoop平臺體現(xiàn)出良好的性能。
【專利說明】—種于Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的方法及系統(tǒng)
【技術領域】
[0001]本發(fā)明涉及Hadoop分布式計算平臺,特別是涉及于MapReduce計算框架下進行任務調(diào)度的方法及系統(tǒng)。
【背景技術】
[0002]在云計算模式下,Hadoop平臺為數(shù)據(jù)中心的用戶提供了大量的服務,與此同時,由于數(shù)據(jù)中心機器的多樣性、用戶提交作業(yè)的復雜性、處理的數(shù)據(jù)與日俱增,Hadoop平臺本身面臨著巨大的挑戰(zhàn),并且這些挑戰(zhàn)對Hadoop的性能有較大的影響。因此,如何使得Hadoop平臺更適應集群的多樣性、作業(yè)的復雜性,增強其健壯性,保持其原有的可擴展性、低成本、高效率、容錯性等特性成為了改善Hadoop性能的關鍵。
[0003]針對Hadoop性能的優(yōu)化,目前可分為四類:
[0004]1.以提高集群中資源利用率為目的的優(yōu)化,如Fairness Scheduler [I] [2] [3][11]、Capacity Scheduler [4]、A Dynamic Map Reduce Scheduler [8],這些優(yōu)化方法的共同點都是將用戶提交的作業(yè)組織成不同的隊列,然后為每一個隊列分配不同大小的資源,以達到資源公平的、充分的使用。
[0005]2.以增加任務本地化的比例來縮短作業(yè)執(zhí)行時間為目的的優(yōu)化,如DelayScheduler [5]、Locality-Aware Scheduler [12],這些優(yōu)化方法的共同點是通過數(shù)據(jù)分布的信息,增加任務本地化執(zhí)行的數(shù)量,減少由于任務拷貝數(shù)據(jù)所花費的IO時間來縮短任務執(zhí)行的時間。
[0006]3.以提高系統(tǒng)吐吞量為目的的優(yōu)化,如Context Aware Scheduler [10],優(yōu)化方案的特點是將任務和節(jié)點同時按照CPU密集型和IO密集型進行劃分,然后將任務依據(jù)對不同類型的節(jié)點的需求進行分配,改善系統(tǒng)的吞吐量。
[0007]4.通過優(yōu)化推測任務執(zhí)行來縮短作業(yè)的執(zhí)行時間,如LATE Scheduler [6] [7]、ALoad-Aware Scheduler [9],這些優(yōu)化方法的共同點是通過實時獲取作業(yè)執(zhí)行進度的信息及數(shù)據(jù)所存放的位置,提高推測任務執(zhí)行的準確率、本地化率,達到縮短作業(yè)執(zhí)行時間的目的。
[0008]但是依丨日沒有解決的問題是:
[0009]Hadoop平臺無法感知集群節(jié)點的異構性狀況,無法根據(jù)節(jié)點自身的處理能力合理有效的初始化集群配置,同時也無法根據(jù)任務的執(zhí)行狀況、集群中異構節(jié)點的處理能力和資源使用情況自動的調(diào)整節(jié)點上運行的任務數(shù)目和資源使用情況,即無論任務的當前任務的執(zhí)行速率如何以及系統(tǒng)的各個資源消耗狀態(tài)如何,Hadoop都無法自動的調(diào)整節(jié)點上資源的使用狀態(tài)以使任務的執(zhí)行達到高效的狀態(tài)且系統(tǒng)資源得到充分的利用。因為目前Hadoop調(diào)度算法中沒有考慮平臺運行在異構環(huán)境下的諸多不同的因素及變化因素,也沒有在平臺運行中提供修改任務Slots的方法和策略。由于上述的問題使得Hadoop平臺在集群和作業(yè)都是異構的情形下,其性能受到了嚴重的影響并且遇到了瓶頸。
【發(fā)明內(nèi)容】
[0010]本發(fā)明解決的問題在于,自動的調(diào)整節(jié)點上運行的任務數(shù)目,以使Hadoop平臺體現(xiàn)出較高的任務執(zhí)行效率。
[0011]更進一步的,實現(xiàn)集群運行任何異構性的作業(yè)或者作業(yè)運行在任何異構性的集群中都能使Hadoop平臺體現(xiàn)出良好的性能。
[0012]更進一步的,通過感知機制對節(jié)點中的資源、任務進行動態(tài)的調(diào)整,提高集群中的資源使用率以縮短作業(yè)的響應時間,使得集群中的資源和任務執(zhí)行速率達到最佳匹配的狀態(tài)。
[0013]更進一步的,使用感知節(jié)點的計算能力、任務執(zhí)行狀態(tài)實現(xiàn)動態(tài)調(diào)整Slots數(shù)目,有效的感知了集群和作業(yè)的異構性。
[0014]本發(fā)明公開了一種于Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的方法,包括:
[0015]步驟10,持續(xù)獲取節(jié)點中運行的任務的執(zhí)行速率;
[0016]步驟20,計算執(zhí)行速率在下降的任務的個數(shù);
[0017]步驟30,根據(jù)該個數(shù)判斷是否需要調(diào)整節(jié)點中所運行的任務的數(shù)目。
[0018]步驟10之前還包括:
[0019]步驟1,獲取集群中每個節(jié)點的處理能力;
[0020]步驟2,獲取每個節(jié)點的處理資源的使用率。
[0021]所述的方法還包括:
[0022]該獲取集群中每個節(jié)點的處理能力的步驟進一步包括:讀取每個節(jié)點上的CPU核數(shù);和/或
[0023]該獲取每個節(jié)點的處理資源的使用率的步驟進一步包括:每隔固定時間間隔讀取每個節(jié)點的CPU使用率以及內(nèi)存使用率。
[0024]該步驟10進一步包括:
[0025]在節(jié)點的每個任務的執(zhí)行過程中,以固定時間間隔持續(xù)獲取該任務的當前執(zhí)行進度,據(jù)以計算各時間點的執(zhí)行速率。
[0026]TER= (TaskProgress_New-TaskProgress_01d) /IntervalTime
[0027]其中,TaskProgress_New為當前任務執(zhí)行進度,TaskProgress_01d為前次任務執(zhí)行進度,TER為執(zhí)行速率,IntervalTime為固定時間間隔。
[0028]該步驟20進一步包括:
[0029]針對每個任務依次判斷:該任務的本次執(zhí)行速率是否小于該任務的前次執(zhí)行速率;
[0030]如果是,該任務視為執(zhí)行速率在下降,該個數(shù)增加I。
[0031 ] 該步驟30進一步包括:
[0032]判斷TER_Changed_Num ^ Curr_Slots_NumX ThresHold 是否為真,如果是,減少該節(jié)點中運行的任務的數(shù)目,如果否,增加該節(jié)點中運行的任務的數(shù)目;
[0033]其中,TER_Changed_Num為執(zhí)行速率在下降的任務的個數(shù),Curr_Slots_Num為節(jié)點中當前運行的任務數(shù),ThresHold為一閾值。
[0034]該減少該節(jié)點中運行的任務的數(shù)目的步驟進一步包括:
[0035]判斷節(jié)點中的當前任務數(shù)目,如果大于I且已有任務執(zhí)行結束,減少節(jié)點中運行的空閑任務的數(shù)目;其余情況返回。
[0036]該增加該節(jié)點中運行的任務的數(shù)目的步驟進一步包括:
[0037]判斷節(jié)點中的當前任務數(shù)目是否等于節(jié)點所配置的最大任務數(shù)目,如果是,進一步判斷節(jié)點的剩余處理資源是否大于新增任務所需的最低處理資源閾值,如果是,在節(jié)點中增加運行至少一空閑任務;其余情況返回。
[0038]本發(fā)明還公開了一種Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的系統(tǒng),包括:
[0039]執(zhí)行速率獲取裝置,持續(xù)獲取節(jié)點中運行的任務的執(zhí)行速率;
[0040]個數(shù)計算裝置,計算執(zhí)行速率在下降的任務的個數(shù);
[0041]調(diào)整判斷裝置,根據(jù)該個數(shù)判斷是否需要調(diào)整節(jié)點中所運行的任務的數(shù)目。
[0042]所述的系統(tǒng)還包括:
[0043]處理能力獲取裝置,獲取集群中每個節(jié)點的處理能力;
[0044]處理資源獲取裝置,獲取每個節(jié)點的處理資源的使用率。
[0045]所述的系統(tǒng)還包括:
[0046]該處理能力獲取裝置進一步包括:讀取每個節(jié)點上的CPU核數(shù)的單元;和/或
[0047]該處理資源獲取裝置進一步包括:每隔固定時間間隔讀取每個節(jié)點的CPU使用率以及內(nèi)存使用率的單元。`
[0048]該執(zhí)行速率獲取裝置進一步包括:
[0049]在節(jié)點的每個任務的執(zhí)行過程中,以固定時間間隔持續(xù)獲取該任務的當前執(zhí)行進度,據(jù)以計算各時間點的執(zhí)行速率的單元。
[0050]TER= (TaskProgress_New-TaskProgress_01d) /IntervalTime
[0051]其中,TaskProgress_New為當前任務執(zhí)行進度,TaskProgress_01d為前次任務執(zhí)行進度,TER為執(zhí)行速率,IntervalTime為固定時間間隔。
[0052]該個數(shù)計算裝置進一步包括:
[0053]針對每個任務依次判斷:該任務的本次執(zhí)行速率是否小于該任務的前次執(zhí)行速率,如果是,該任務視為執(zhí)行速率在下降,該個數(shù)增加I的單元。
[0054]該調(diào)整判斷裝置進一步包括:
[0055]判斷TER_Changed_Num ^ Curr_Slots_NumX ThresHold 是否為真的單兀,如果是,調(diào)用減少該節(jié)點中運行的任務的數(shù)目的單元,如果否,調(diào)用增加該節(jié)點中運行的任務的數(shù)目的單元;其中,TER_Changed_Num為執(zhí)行速率在下降的任務的個數(shù),Curr_Slots_Num為節(jié)點中當前運行的任務數(shù),ThresHold為一閾值。
[0056]該減少該節(jié)點中運行的任務的數(shù)目的單元進一步包括:
[0057]判斷節(jié)點中的當前任務數(shù)目,如果大于I且已有任務執(zhí)行結束,減少節(jié)點中運行的空閑任務的數(shù)目,執(zhí)行減少節(jié)點中運行的空閑任務的數(shù)目的模塊。
[0058]該增加該節(jié)點中運行的任務的數(shù)目的單元進一步包括:
[0059]判斷節(jié)點中的當前任務數(shù)目是否等于節(jié)點所配置的最大任務數(shù)目,如果是,進一步判斷節(jié)點的剩余處理資源是否大于新增任務所需的最低處理資源閾值,如果是,在節(jié)點中增加運行至少一空閑任務的單元。
[0060]本發(fā)明通過心跳機制傳遞信息,解決了原有的集群與作業(yè)任務之間的隔離問題。同時,自動的調(diào)整節(jié)點上運行的任務數(shù)目,以使Hadoop平臺體現(xiàn)出較高的任務執(zhí)行效率。使用感知節(jié)點的計算能力、任務執(zhí)行狀態(tài)實現(xiàn)動態(tài)調(diào)整Slots數(shù)目,有效的感知了集群和作業(yè)的異構性。實現(xiàn)集群運行任何異構性的作業(yè)或者作業(yè)運行在任何異構性的集群中都能使Hadoop平臺體現(xiàn)出良好的性能。通過感知機制對節(jié)點中的資源、任務進行動態(tài)的調(diào)整,提高集群中的資源使用率以縮短作業(yè)的響應時間,使得集群中的資源和任務執(zhí)行速率達到最佳匹配的狀態(tài)。
【專利附圖】
【附圖說明】
[0061]圖1所示為本發(fā)明的一種于Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的方法的流程圖;
[0062]圖2所示為本發(fā)明的一種于Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的方法的詳細流程圖;
[0063]圖3A、3B所示為本發(fā)明的一種Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的系統(tǒng)的示意圖。
[0064]圖4所示為Hadoop平臺的結構示意圖。
【具體實施方式】
[0065]Hadoop平臺包括主平臺100以及多個節(jié)點200。主平臺100中包括JobTracker節(jié)點。每個節(jié)點200中包括TaskTracker節(jié)點以及DataNode節(jié)點。每個節(jié)點200的DataNode節(jié)點均與一 NameNode節(jié)點300連接。
[0066]Hadoop平臺中包括多個節(jié)點,每個節(jié)點均設置有處理器,從而擁有處理能力。同時,每個節(jié)點均可接受用戶發(fā)送的作業(yè),據(jù)以運行不同的任務。每個節(jié)點具有標志slot,slot用來標識任務是否可以執(zhí)行且可以同時執(zhí)行幾個。本發(fā)明可基于節(jié)點中各個任務的運行情況,動態(tài)調(diào)整所執(zhí)行的任務的數(shù)目,以提高Hadoop平臺的任務執(zhí)行效率。
[0067]如圖1所示為本發(fā)明的一種于Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的方法的流程圖。
[0068]步驟10,通過心跳機制持續(xù)獲取節(jié)點中運行的任務的執(zhí)行速率;
[0069]步驟20,計算執(zhí)行速率在下降的任務的個數(shù);
[0070]步驟30,根據(jù)該個數(shù)判斷是否需要調(diào)整節(jié)點中所運行的任務的數(shù)目。
[0071]本發(fā)明通過持續(xù)監(jiān)控節(jié)點中運行的任務的執(zhí)行速率的變化,而實時調(diào)整節(jié)點中的任務數(shù)目,從而實現(xiàn)集群運行任何異構性的作業(yè)或者作業(yè)運行在任何異構性的集群中都能使Hadoop平臺體現(xiàn)出良好的性能和較高的任務執(zhí)行效率。
[0072]以下具體描述本發(fā)明的實現(xiàn)過程。如圖2所示為本發(fā)明的一種于Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的方法的詳細流程圖。
[0073]在步驟10之前,執(zhí)行步驟1:獲取集群中每個節(jié)點的計算能力。
[0074]獲取集群中每個節(jié)點的計算能力的步驟通過讀取每個節(jié)點上的CPU核數(shù)的方式來實現(xiàn)。CPU可以是一核、雙核或多核,節(jié)點上的CPU核數(shù)的多寡用于表述該節(jié)點的計算能力的高低。通過步驟I可使得Hadoop平臺能夠感知異構集群中每個節(jié)點的處理能力。
[0075]具體而言,步驟I中,Hadoop集群中每個節(jié)點會讀取Linux系統(tǒng)下/proc/cpuinfo文件,以讀取該節(jié)點上CPU核數(shù)的信息,并把CPU核數(shù)作為判斷節(jié)點計算能力高低的參數(shù)存儲于TaskTrackerStatus對象中的成員變量coresNum中。
[0076]接下來,用戶提交的作業(yè)經(jīng)過初始化生成多個任務已運行在集群中的各個節(jié)點上,此時,執(zhí)行步驟2,獲取每個節(jié)點的處理資源的使用率。[0077]該步驟2具體可通過每隔固定時間間隔讀取每個節(jié)點的CPU使用率以及內(nèi)存使用率的方式來實現(xiàn)。
[0078]具體而言,Hadoop平臺管理節(jié)點要每隔一段時間獲取節(jié)點處理資源的使用情況,以作為后續(xù)調(diào)整任務數(shù)目時的參考。節(jié)點通過輔助工具OSUtils讀取Linux系統(tǒng)下/proc/stat文件計算出當前CPU的使用率,并通過讀取Linux系統(tǒng)下/proc/meminfo文件計算內(nèi)存的使用率,然后,將獲取的CPU和內(nèi)存的使用率存儲到TaskTrackerStatus對象中的成員變量 CPU_UtiIization_Factor 與 MEM_UtiIization_Factor 中。為了保證獲取的信息能夠反映節(jié)點當前的狀態(tài)和任務的執(zhí)行情況,該固定時間間隔可以是Hadoop平臺固有的心跳時間間隔,以借助心跳機制在平臺與節(jié)點之間傳遞信息,克服原有的集群與任務之間的隔離問題。
[0079]步驟2以后繼續(xù)執(zhí)行步驟10 =Hadoop平臺在每個任務的執(zhí)行過程中,以固定時間間隔持續(xù)獲取該任務的當前執(zhí)行進度,據(jù)以計算各采樣時間點的執(zhí)行速率。
[0080]也就是說,節(jié)點中可能執(zhí)行著多個任務,對每個任務均進行執(zhí)行進度的采樣,gp,每隔固定時間間隔,獲取任務的當前任務執(zhí)行進度。每兩個采樣時間點之間間隔該固定時間間隔,每個采樣時間點均對應有本次采樣得到的當前任務執(zhí)行進度,則通過相鄰的兩次采樣得到的執(zhí)行進度,計算得到在后采樣時間點的執(zhí)行速率。該固定時間間隔可以是Hadoop平臺固有的心跳時間間隔,即,利用心跳機制傳遞信息。
[0081]即,TER=(TaskProgress_New-TaskProgress_01d) /IntervalTime
[0082]其中,TaskProgress_New為當前任務執(zhí)行進度,TaskProgress_01d為前次任務執(zhí)行進度,TER為執(zhí)行速率,IntervalTime為固定時間間隔。
[0083]具體而言,為節(jié)點上運行的多個任務構建一個AttemptMapTask集合并存儲于TaskTracker對象中,集合采用Key-Value存儲格式,執(zhí)行MapTask的任務ID (TaskID)作為Key, MapTask的執(zhí)行進度(TaskProgress)作為Value,為了節(jié)省空間集合中僅存放最近一次記錄的信息;集合存放形式為{(TaskIDl, TaskProgress_l), (TaskID2,TaskProgress_2),......(TaskIDn, TaskProgress_n) }, n 為節(jié)點上同時運行的任務數(shù)目。
[0084]Hadoop平臺通過任務的執(zhí)行狀態(tài)(TaskStatus)獲取任務的TaskID和任務本次執(zhí)行進度(TaskProgress_New)。具體的,獲取該節(jié)點上本次的狀態(tài)為Running的TaskID和TaskProgress_New,判斷在任務執(zhí)行進度集合中是否有該TaskID的鍵值對;如果有,首先取出任務的前次任務執(zhí)行進度(TaskProgress_01d),然后更新該任務在任務執(zhí)行進度集合中的當前執(zhí)行進度值;如果沒有,則將前次任務執(zhí)行進度(TaskPrOgreSS_01d)賦值為零,同時將本次的任務執(zhí)行進度添加到集合中。根據(jù)TaskID到集合中取出的前次任務執(zhí)行進度TaskProgress_01d,計算對應的任務執(zhí)行速率。任務執(zhí)行速率用于描述該節(jié)點上任務執(zhí)行的快慢,該值等于取得的當前任務執(zhí)行進度(TaskProgress_New)與前次該任務的執(zhí)行進度(TaskProgress_01d)差比上時間間隔。該時間間隔為固定時間間隔。Hadoop平臺通過對當前節(jié)點心跳信息的處理而獲得任務的執(zhí)行情況,特別是執(zhí)行速率。
[0085]接下來執(zhí)行步驟20,針對每個任務依次判斷:該任務的當前執(zhí)行速率是否小于該任務的前次執(zhí)行速率;如果是,該任務視為執(zhí)行速率在下降;統(tǒng)計執(zhí)行速率下降的任務的個數(shù)。
[0086]本發(fā)明在每個采樣時間點,均對所有任務的當前執(zhí)行速率進行判斷,則對比每個任務的當前執(zhí)行速率與前次執(zhí)行速率,即可獲知該任務的執(zhí)行速率是否在下降。
[0087]具體而言,該步驟通過如下方式實現(xiàn):構建一個TaskTER集合用于存儲節(jié)點上運行的多個任務,并將集合存儲于TaskTracker對象中,存儲格式與AttemptMapTask集合一樣,執(zhí)行MapTaskID作為Key,任務的執(zhí)行速率TER作為Value,為了節(jié)省空間集合中僅存放最近一次記錄的信息;集合存放形式為{(TaskIDl,TER-1), (TaskID2,
TER-2),.......(TaskIDn,TER-n)},n為節(jié)點上同時運行的Task數(shù)目。根據(jù)步驟10的結
果,獲取任務當前的執(zhí)行速率TER_New及其所對應的TaskID。判斷在任務執(zhí)行速率集合中是否有該TaskID的鍵值對,如果有,首先取出任務的前次執(zhí)行速率(TER_01d),然后更新該任務在任務執(zhí)行速率集合中的當前執(zhí)行速率值;如果沒有,則將前次任務執(zhí)行速率(TER_Old)賦值為-1,同時將當前的執(zhí)行速率添加到集合中。比較TER_New的值與TER_01d的值的大??;如果 TER_New 小于 TER_01d,則 TER_Changed_Num 加 I,反之 TER_Changed_Num 值不變。將TER_Changed_Num的值存放在TaskTracker對象中的成員變量中。
[0088]接下來執(zhí)行步驟30,根據(jù)執(zhí)行速率在下降的任務的個數(shù)判斷是否需要調(diào)整節(jié)點中所運行的任務的數(shù)目。
[0089]節(jié)點中存儲有一專門用于判斷調(diào)整與否的閾值,具體的判斷標準為:
[0090]判斷TER_Changed_Num ^ Curr_Slots_NumX ThresHold 是否為真,如果是,表明當前節(jié)點運行的任務較多,則減少該節(jié)點中運行的任務的數(shù)目,執(zhí)行步驟41,該減少的數(shù)目可為一預定步數(shù),例如I個或多個;如果否,表明當前節(jié)點還有剩余處理資源,則增加該節(jié)點中運行的任務的數(shù)目,執(zhí)行步驟42,該增加的數(shù)目可為一預定步數(shù),例如I個或多個;其中,TER_Changed_Num為執(zhí)行速率在下降的任務的個數(shù),Curr_Slots_Num為節(jié)點中當前運行的任務數(shù),ThresHold為該閾值。
[0091]步驟41,判斷節(jié)點中的當前任務數(shù)目,如果大于1,減少節(jié)點中運行的空閑任務的數(shù)目;如果等于I且該任務已執(zhí)行結束,減少節(jié)點中運行的空閑任務的數(shù)目;其余情況返回。
[0092]具體而言,獲取節(jié)點上當前的任務數(shù)(Curr_Slots_Num)、任務的狀態(tài)(Task_State)、當前空閑任務數(shù)(numFreeSlots)、最大任務數(shù)(maxMapSlots)、最大的Jvm數(shù)(maxjvms);其次,判斷減少任務條件是否滿足,即判斷Curr_Slots_Num的數(shù)目,如果大于I且已經(jīng)有任務執(zhí)行結束,則減少numFreeSlots、maxMapSlots、maxjvms,其余情況,返回;
[0093]步驟42,判斷節(jié)點中的當前任務數(shù)目是否等于節(jié)點所配置的最大任務數(shù)目,如果是,說明配置的任務數(shù)目不是最佳的,則進一步判斷節(jié)點的剩余處理資源是否大于新增任務所需的最低處理資源閾值,如果是,在節(jié)點中增加運行至少一空閑任務;其余情況返回。特別是,根據(jù)步驟2的結果,判斷剩余處理資源是否大于新增任務所需的最低處理資源閾值。
[0094]具體而言,獲取節(jié)點上當前的任務數(shù)(Curr_Slots_Num)、任務的狀態(tài)(Task_State)、當前空閑任務數(shù)(numFreeSlots)、最大任務數(shù)(maxMapSlots)、最大的Jvm數(shù)(maxjvms);其次,判斷增加任務條件是否滿足,即判斷Curr_Slots_Num是否已經(jīng)達到節(jié)點的任務最大值(maxMapSlots);如果Curr_Slots_Num等于maxMapSlots,且節(jié)點上剩余的處理資源能夠滿足新增任務的要求,就增加numFreeSlots、maxMapSlots、maxjvms ;其余情況返回。[0095]接下來,步驟41或42執(zhí)行結束后,執(zhí)行步驟50,將步驟41或42的執(zhí)行結果,通過心跳機制發(fā)送給JobTracker,由JobTracker根據(jù)修改后的任務數(shù)目決定任務的分配。其實現(xiàn)方法為:
[0096]修改任務數(shù)目后,重新判斷用于標識節(jié)點是否請求新任務的標志askForNewTask。隨后,TaskTracker利用心跳向JobTracker發(fā)送請求任務的標志askForNewTask,JobTracker在接受該標志位后,會根據(jù)修改后的任務數(shù)目和該標志的值,決定任務分配。
[0097]本發(fā)明中,在每個采樣時間點均執(zhí)行上述步驟2、10、20、30、41、42、50,則Hadoop平臺可隨時動態(tài)調(diào)整節(jié)點中的任務數(shù)目。
[0098]本發(fā)明通過感知節(jié)點的計算能力,并根據(jù)資源使用情況和任務執(zhí)行情況動態(tài)調(diào)整Slots數(shù)目,達到任務的執(zhí)行效率與節(jié)點資源的較佳匹配狀態(tài)。對于構造適合異構性集群和作業(yè)的云平臺有重要的實際意義,具有良好的市場前景和應用價值。 [0099]另外,對應圖1、2所述的方法,本發(fā)明還公開了一種Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的系統(tǒng),如圖3A、3B所示,包括:
[0100]執(zhí)行速率獲取裝置310,持續(xù)獲取節(jié)點中運行的任務的執(zhí)行速率;
[0101]個數(shù)計算裝置320,計算執(zhí)行速率在下降的任務的個數(shù);
[0102]調(diào)整判斷裝置330,根據(jù)該個數(shù)判斷是否需要調(diào)整節(jié)點中所運行的任務的數(shù)目。
[0103]所述系統(tǒng)還包括:處理能力獲取裝置301,獲取集群中每個節(jié)點的處理能力;處理資源獲取裝置302,獲取每個節(jié)點的處理資源的使用率。
[0104]該處理能力獲取裝置301進一步包括:讀取每個節(jié)點上的CPU核數(shù)的單元。
[0105]該處理資源獲取裝置302進一步包括:每隔固定時間間隔讀取每個節(jié)點的CPU使用率以及內(nèi)存使用率的單元。
[0106]該執(zhí)行速率獲取裝置310進一步包括:在節(jié)點的每個任務的執(zhí)行過程中,以固定時間間隔持續(xù)獲取該任務的當前執(zhí)行進度,據(jù)以計算各時間點的執(zhí)行速率的單元。
[0107]TER= (TaskProgress_New-TaskProgress_01d) /IntervalTime
[0108]其中,TaskProgress_New為當前任務執(zhí)行進度,TaskProgress_01d為前次任務執(zhí)行進度,TER為執(zhí)行速率,IntervalTime為固定時間間隔。
[0109]該個數(shù)計算裝置320進一步包括:針對每個任務依次判斷:該任務的本次執(zhí)行速率是否小于該任務的前次執(zhí)行速率,如果是,該任務視為執(zhí)行速率在下降,該個數(shù)增加I的單元。
[0110]該調(diào)整判斷裝置330進一步包括:
[0111]判斷TER_Changed_Num ^ Curr_Slots_NumX ThresHold 是否為真的單兀,如果是,調(diào)用減少該節(jié)點中運行的任務的數(shù)目的單元,如果否,調(diào)用增加該節(jié)點中運行的任務的數(shù)目的單元;其中,TER_Changed_Num為執(zhí)行速率在下降的任務的個數(shù),Curr_Slots_Num為節(jié)點中當前運行的任務數(shù),ThresHold為一閾值。
[0112]該減少該節(jié)點中運行的任務的數(shù)目的單元進一步包括:判斷節(jié)點中的當前任務數(shù)目,如果大于I且已有任務執(zhí)行結束,減少節(jié)點中運行的空閑任務的數(shù)目,例如減1,執(zhí)行減少節(jié)點中運行的空閑任務的數(shù)目的模塊。特別的,為了加速算法的收斂,在較短的時間內(nèi)找出運行任務數(shù)目的最優(yōu)值,減少的任務數(shù)可以是根據(jù)歷史任務信息來決定本次需要減少的任務個數(shù)。[0113]該增加該節(jié)點中運行的任務的數(shù)目的單元進一步包括:判斷節(jié)點中的當前任務數(shù)目是否等于節(jié)點所配置的最大任務數(shù)目,如果是說明配置的任務數(shù)據(jù)還不是最佳的,則進一步判斷節(jié)點的剩余處理資源是否大于新增任務所需的最低處理資源閾值,如果是,在節(jié)點中增加運行至少一空閑任務的單元。
[0114]本發(fā)明通過心跳機制傳遞的信息,解決了原有的集群與作業(yè)任務之間的隔離問題。同時,自動的調(diào)整節(jié)點上運行的任務數(shù)目,以使Hadoop平臺體現(xiàn)出較高的任務執(zhí)行效率。使用感知節(jié)點的計算能力、任務執(zhí)行狀態(tài)實現(xiàn)動態(tài)調(diào)整Slots數(shù)目,有效的感知了集群和作業(yè)的異構性。實現(xiàn)集群運行任何異構性的作業(yè)或者作業(yè)運行在任何異構性的集群中都能使Hadoop平臺體現(xiàn)出良好的性能。通過感知機制對節(jié)點中的資源、任務進行動態(tài)的調(diào)整,提高集群中的資源使用率以縮短作業(yè)的響應時間,使得集群中的資源和任務執(zhí)行速率達到最佳匹配的狀態(tài)。
【權利要求】
1.一種于Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的方法,其特征在于,包括: 步驟10,持續(xù)獲取節(jié)點中運行的任務的執(zhí)行速率; 步驟20,計算執(zhí)行速率在下降的任務的個數(shù); 步驟30,根據(jù)該個數(shù)判斷是否需要調(diào)整節(jié)點中所運行的任務的數(shù)目。
2.如權利要求1所述的方法,其特征在于,步驟10之前還包括: 步驟1,獲取集群中每個節(jié)點的處理能力; 步驟2,獲取每個節(jié)點的處理資源的使用率。
3.如權利要求2所述的方法,其特征在于,還包括: 該獲取集群中每個節(jié)點的處理能力的步驟進一步包括:讀取每個節(jié)點上的CPU核數(shù);和/或 該獲取每個節(jié)點的處理資源的使用率的步驟進一步包括:每隔固定時間間隔讀取每個節(jié)點的CPU使用率以及內(nèi)存使用率。
4.如權利要求1所述的方法,其特征在于,該步驟10進一步包括: 在節(jié)點的每個任務的執(zhí)行過程中,以固定時間間隔持續(xù)獲取該任務的當前執(zhí)行進度,據(jù)以計算各時間點的執(zhí)行速率。
5.如權利要求4`所述的方法,其特征在于:
TER = (TaskProgress_New-TaskProgress_01d)/IntervalTime其中,TaskProgress_New為當前任務執(zhí)行進度,TaskProgress_01d為前次任務執(zhí)行進度,TER為執(zhí)行速率,IntervalTime為固定時間間隔。
6.如權利要求4所述的方法,其特征在于,該步驟20進一步包括: 針對每個任務依次判斷:該任務的本次執(zhí)行速率是否小于該任務的前次執(zhí)行速率; 如果是,該任務視為執(zhí)行速率在下降,該個數(shù)增加I。
7.如權利要求1或2所述的方法,其特征在于,該步驟30進一步包括: 判斷TER_Changed_Num ^ Curr_Slots_NumX ThresHold是否為真,如果是,減少該節(jié)點中運行的任務的數(shù)目,如果否,增加該節(jié)點中運行的任務的數(shù)目; 其中,TER_Changed_Num為執(zhí)行速率在下降的任務的個數(shù),Curr_Slots_Num為節(jié)點中當前運行的任務數(shù),ThresHold為一閾值。
8.如權利要求7所述的方法,其特征在于,該減少該節(jié)點中運行的任務的數(shù)目的步驟進一步包括: 判斷節(jié)點中的當前任務數(shù)目,如果大于I且已有任務執(zhí)行結束,減少節(jié)點中運行的空閑任務的數(shù)目,其余情況返回。
9.如權利要求7所述的方法,其特征在于,該增加該節(jié)點中運行的任務的數(shù)目的步驟進一步包括: 判斷節(jié)點中的當前任務數(shù)目是否等于節(jié)點所配置的最大任務數(shù)目,如果是,進一步判斷節(jié)點的剩余處理資源是否大于新增任務所需的最低處理資源閾值,如果是,在節(jié)點中增加運行至少一空閑任務;其余情況返回。
10.一種Hadoop平臺中動態(tài)調(diào)整任務數(shù)目的系統(tǒng),其特征在于,包括: 執(zhí)行速率獲取裝置,持續(xù)獲取節(jié)點中運行的任務的執(zhí)行速率; 個數(shù)計算裝置,計算執(zhí)行速率在下降的任務的個數(shù);調(diào)整判斷裝置,根據(jù)該個數(shù)判斷是否需要調(diào)整節(jié)點中所運行的任務的數(shù)目。
11.如權利要求10所述的系統(tǒng),其特征在于,還包括: 處理能力獲取裝置,獲取集群中每個節(jié)點的處理能力; 處理資源獲取裝置,獲取每個節(jié)點的處理資源的使用率。
12.如權利要求11所述的系統(tǒng),其特征在于,還包括: 該處理能力獲取裝置進一步包括:讀取每個節(jié)點上的CPU核數(shù)的單元;和/或該處理資源獲取裝置進一步包括:每隔固定時間間隔讀取每個節(jié)點的CPU使用率以及內(nèi)存使用率的單元。
13.如權利要求10所述的系統(tǒng),其特征在于,該執(zhí)行速率獲取裝置進一步包括: 在節(jié)點的每個任務的執(zhí)行過程中,以固定時間間隔持續(xù)獲取該任務的當前執(zhí)行進度,據(jù)以計算各時間點的執(zhí)行速率的單元。
14.如權利要求13所述的系統(tǒng),其特征在于:
TER = (TaskProgress_New-TaskProgress_01d)/IntervalTime其中,TaskProgress_New為當前任務執(zhí)行進度,TaskProgress_01d為前次任務執(zhí)行進度,TER為執(zhí)行速率,IntervalTime為固定時間間隔。
15.如權利要求13所述的系統(tǒng),其特征在于,該個數(shù)計算裝置進一步包括: 針對每個任務依次判斷:該任務的本次`執(zhí)行速率是否小于該任務的前次執(zhí)行速率,如果是,該任務視為執(zhí)行速率在下降,該個數(shù)增加I的單元。
16.如權利要求10或11所述的系統(tǒng),其特征在于,該調(diào)整判斷裝置進一步包括: 判斷TER_Changed_Num ^ Curr_Slots_NumX ThresHold是否為真的單兀,如果是,調(diào)用減少該節(jié)點中運行的任務的數(shù)目的單元,如果否,調(diào)用增加該節(jié)點中運行的任務的數(shù)目的單元;其中,TER_Changed_Num為執(zhí)行速率在下降的任務的個數(shù),Curr_Slots_Num為節(jié)點中當前運行的任務數(shù),ThresHold為一閾值。
17.如權利要求16所述的系統(tǒng),其特征在于,該減少該節(jié)點中運行的任務的數(shù)目的單元進一步包括: 判斷節(jié)點中的當前任務數(shù)目,如果大于I且已有任務執(zhí)行結束,減少節(jié)點中運行的空閑任務的數(shù)目,執(zhí)行減少節(jié)點中運行的空閑任務的數(shù)目的模塊。
18.如權利要求16所述的系統(tǒng),其特征在于,該增加該節(jié)點中運行的任務的數(shù)目的單元進一步包括: 判斷節(jié)點中的當前任務數(shù)目是否等于節(jié)點所配置的最大任務數(shù)目,如果是,進一步判斷節(jié)點的剩余處理資源是否大于新增任務所需的最低處理資源閾值,如果是,在節(jié)點中增加運行至少一空閑任務的單元。
【文檔編號】G06F9/46GK103699433SQ201310700010
【公開日】2014年4月2日 申請日期:2013年12月18日 優(yōu)先權日:2013年12月18日
【發(fā)明者】康凱, 趙霞, 宋 瑩, 孫毓忠 申請人:中國科學院計算技術研究所