本發(fā)明涉及計算機技術領域,尤其涉及的是一種資源管理方法、裝置和系統(tǒng)。
背景技術:
Hadoop系統(tǒng)是目前使用十分廣泛的一個分布式系統(tǒng),用來處理大規(guī)模數據。Hadoop集群由一個主節(jié)點和多個從節(jié)點組成,每個節(jié)點可以是一臺計算機或者一臺虛擬機。主節(jié)點用來管理Hadoop分布式文件系統(tǒng)HDFS(Hadoop Distributed File System,HDFS)和各個作業(yè)的處理過程(即MapReduce計算框架),從節(jié)點負責數據的存儲和對作業(yè)數據的處理。Hadoop采用Google公司提出的MapReduce并行處理框架。主節(jié)點在MapReduce中稱為JobTracker,負責作業(yè)的處理過程;從節(jié)點在MapReduce框架中稱之為TaskTracker,負責作業(yè)任務的執(zhí)行。Hadoop作業(yè)的輸入數據被劃分成很多大小相同的數據塊分布在計算機集群中,由多個節(jié)點并行處理這些輸入數據從而加快作業(yè)的處理時間。一個節(jié)點可以通過配置同時存儲和處理多個數據塊,每個數據塊對應一個任務。作業(yè)的執(zhí)行分為兩個階段:第一個階段即map階段,各個節(jié)點處理分布在集群中作業(yè)的map任務;第二個階段為Reduce階段,即通過reduce任務對分布在各個節(jié)點的map任務處理結果進行匯總,形成最終的作業(yè)處理結果。
在Hadoop集群中,所有的計算資源被抽象為槽,每個槽可以被獨占用來處理一個任務,根據計算節(jié)點(即從節(jié)點)的硬件配置,管理員可以配置不同數目的槽。由于每個作業(yè)都由一個map任務集合和一個reduce任務集合組成,而map任務和reduce任務對集群資源的需求有所不同,所以將槽劃分為map槽和reduce槽兩種類型。其中,map槽只能運行map任務,reduce槽只能運行reduce任務。所以在Hadoop中槽是最基本的計算單元,并且槽的數 目在集群啟動前已被管理員配置完畢,運行過程中不能改變。資源槽也是資源分配的基本單位,每個資源槽占用著本節(jié)點上一定的物理資源,比如CPU、內存、磁盤和網絡帶寬。圖1是一個計算節(jié)點和資源槽的示意圖。
在Hadoop中,每個作業(yè)包括map任務集合和reduce任務集合,每一個任務對應一個資源槽(map任務對應map槽,reduce任務對應reduce槽),對作業(yè)任務的執(zhí)行有兩個嚴格的限制:(1)reduce任務必須在所有map任務完成后才能真正開始;(2)map任務只能運行在map槽上,reduce任務只能運行在reduce槽上。這兩個限制帶來的結果就是在不同的作業(yè)負載和資源槽配置下,集群資源利用率和性能都有較大不同,即使在最優(yōu)的作業(yè)提交順序和最優(yōu)的配置資源槽下仍然會嚴重影響相應資源槽的利用率。由于map任務和reduce任務的數目隨著時間的推移都在不斷的變化,分配給map(或者reduce)任務的資源槽數目可能會超過map(或者reduce)任務的數目。所以,在MapReduce集群動態(tài)負載下,可能會出現一種資源槽負載過重而另一種資源槽卻有空閑,從而導致資源浪費
技術實現要素:
本發(fā)明所要解決的技術問題是提供一種資源管理方法、裝置和系統(tǒng),能夠提高Hadoop系統(tǒng)的資源利用率。
本發(fā)明實施例提供了一種資源管理方法,應用于Hadoop系統(tǒng)的主節(jié)點,該方法包括:
獲取從節(jié)點的空閑資源槽信息;
從等待資源分配的用戶隊列中選取用戶,在選出用戶后,從所述用戶的待運行任務隊列中選取待運行任務,包括:根據所述空閑資源槽信息中的空閑資源槽類型信息,優(yōu)先從所述用戶的待運行任務隊列中選取與所述空閑資源槽類型匹配的待運行任務,在不存在與所述空閑資源槽類型匹配的待運行任務時,選取與所述空閑資源槽類型不同的待運行任務;
在成功選取到待運行任務后,將所述待運行任務分配給所述從節(jié)點。
可選地,所述從等待資源分配的用戶隊列中選取用戶,包括:
從所述等待資源分配的用戶隊列的頭部開始掃描所述用戶隊列;
每掃描到一個用戶,判斷所述用戶是否滿足分配條件,如所述用戶滿足所述分配條件,則掃描終止,如所述用戶不滿足所述分配條件,則掃描下一個用戶。
可選地,所述分配條件包括:所述用戶具有滿足數據本地性要求的待運行任務。
可選地,在所述分配條件包含數據本地性要求時,從所述用戶的待運行任務隊列中選取待運行任務,還包括:
如掃描完所有的用戶后未能選取到待運行任務,則從所述分配條件中去除數據本地性要求,重新從所述等待資源分配的用戶隊列的頭部開始掃描所述用戶隊列,每掃描到一個用戶,判斷所述用戶是否具有待運行任務,如所述用戶具有待運行任務,則掃描終止,從所述用戶的待運行任務隊列中選取待運行任務,如所述用戶沒有待運行任務,則掃描下一個用戶。
本發(fā)明實施例還提供了一種資源管理方法,應用于Hadoop系統(tǒng)的從節(jié)點,該方法包括:
檢測到空閑資源槽后,向主節(jié)點發(fā)送攜帶空閑資源槽信息的通知消息,所述空閑資源槽信息包括本節(jié)點的空閑資源槽的類型信息;
接收所述主節(jié)點為本節(jié)點的空閑資源槽分配的待運行任務并將接收到的待運行任務放入任務啟動隊列中;
在所述任務啟動隊列非空且當前存在空閑資源槽時,從所述任務啟動隊列中取出待運行任務進行啟動。
可選地,所述接收所述主節(jié)點分配的待運行任務并將接收到的待運行任務放入任務啟動隊列中,包括:
將接收到的map任務放入map任務啟動隊列,將接收到的reduce任務放入reduce任務啟動隊列;
所述在所述任務啟動隊列非空且當前存在空閑資源槽時,從所述任務啟 動隊列中取出待運行任務進行啟動,包括:
如所述reduce任務啟動隊列非空且當前存在空閑資源槽,則從所述reduce任務啟動隊列中取出待運行任務進行啟動;
如所述reduce任務啟動隊列為空且所述map任務啟動隊列非空且當前存在空閑資源槽,則從所述map任務啟動隊列中取出待運行任務進行啟動。
本發(fā)明實施例還提供了一種資源管理裝置,應用于Hadoop系統(tǒng)的主節(jié)點,包括:
信息接收模塊,用于獲取從節(jié)點的空閑資源槽信息;
任務調度模塊,用于從等待資源分配的用戶隊列中選取用戶,在選出用戶后,從所述用戶的待運行任務隊列中選取待運行任務,包括:根據所述空閑資源槽信息中的空閑資源槽類型信息,優(yōu)先從所述用戶的待運行任務隊列中選取與所述空閑資源槽類型匹配的待運行任務,在不存在與所述空閑資源槽類型匹配的待運行任務時,選取與所述空閑資源槽類型不同的待運行任務;
信息發(fā)送模塊,用于在成功選取到待運行任務后,將所述待運行任務分配給所述從節(jié)點。
可選地,所述任務調度模塊,用于從等待資源分配的用戶隊列中選取用戶,包括:
從所述等待資源分配的用戶隊列的頭部開始掃描所述用戶隊列;
每掃描到一個用戶,判斷所述用戶是否滿足分配條件,如所述用戶滿足所述分配條件,則掃描終止,如所述用戶不滿足所述分配條件,則掃描下一個用戶。
可選地,所述分配條件包括:所述用戶具有滿足數據本地性要求的待運行任務。
可選地,所述任務調度模塊,用于在所述分配條件包含數據本地性要求時,從所述用戶的待運行任務隊列中選取待運行任務,還包括:如掃描完所有的用戶后未能選取到待運行任務,則從所述分配條件中去除數據本地性要求,重新從所述等待資源分配的用戶隊列的頭部開始掃描所述用戶隊列,每 掃描到一個用戶,判斷所述用戶是否具有待運行任務,如所述用戶具有待運行任務,則掃描終止,從所述用戶的待運行任務隊列中選取待運行任務,如所述用戶沒有待運行任務,則掃描下一個用戶。
本發(fā)明實施例還提供了一種資源管理裝置,應用于Hadoop系統(tǒng)的從節(jié)點,包括:
檢測及上報模塊,用于向主節(jié)點發(fā)送攜帶空閑資源槽信息的通知消息,所述空閑資源槽信息包括本節(jié)點的空閑資源槽的類型信息;
接收及處理模塊,用于接收所述主節(jié)點為本節(jié)點的空閑資源槽分配的待運行任務并將接收到的待運行任務放入任務啟動隊列中;
任務啟動模塊,用于在所述任務啟動隊列非空且當前存在空閑資源槽時,從所述任務啟動隊列中取出待運行任務進行啟動。
可選地,所述接收及處理模塊,用于接收所述主節(jié)點分配的待運行任務并將接收到的待運行任務放入任務啟動隊列中,包括:
將接收到的map任務放入map任務啟動隊列,將接收到的reduce任務放入reduce任務啟動隊列;
所述任務啟動模塊,用于在所述任務啟動隊列非空且當前存在空閑資源槽時,從所述任務啟動隊列中取出待運行任務進行啟動,包括:
如所述reduce任務啟動隊列非空且當前存在空閑資源槽,則從所述reduce任務啟動隊列中取出待運行任務進行啟動;
如所述reduce任務啟動隊列為空且所述map任務啟動隊列非空且當前存在空閑資源槽,則從所述map任務啟動隊列中取出待運行任務進行啟動。
本發(fā)明實施例還提供了一種資源管理系統(tǒng),包括:
具有上述資源管理裝置的Hadoop系統(tǒng)主節(jié)點,和具有上述資源管理裝置的Hadoop系統(tǒng)從節(jié)點。
與現有技術相比,本發(fā)明提供的一種資源管理方法、裝置和系統(tǒng),通過對主節(jié)點上的調度器和從節(jié)點上的任務跟蹤器進行改進,打破了Hadoop系統(tǒng)中map槽只能運行map任務,reduce槽只能運行reduce任務的限制,盡可能 使所有的資源槽都保持忙碌,從而提高Hadoop系統(tǒng)的資源利用率。
附圖說明
圖1為計算節(jié)點和資源槽的示意圖。
圖2為本發(fā)明實施例用戶資源池內部資源槽借用示意圖。
圖3為本發(fā)明實施例用戶間資源池資源槽借用示意圖。
圖4為本發(fā)明實施例一種資源管理方法的示意圖(主節(jié)點)。
圖5為本發(fā)明實施例一種資源管理方法的示意圖(從節(jié)點)。
圖6為本發(fā)明實施例一種資源管理裝置示意圖(主節(jié)點)。
圖7為本發(fā)明實施例一種資源管理裝置示意圖(從節(jié)點)。
圖8為本發(fā)明實施例一種資源管理系統(tǒng)示意圖。
具體實施方式
為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚明白,下文中將結合附圖對本發(fā)明的實施例進行詳細說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互任意組合。
多個作業(yè)在從map階段進入reduce階段的過程中,在不同的時間段可能會出現一類資源槽空閑,而另一類卻負載過重。對于這些空閑的reduce槽(或者map槽),可以借給負載過重的map(或者reduce)任務使用,從而提高Hadoop系統(tǒng)的資源利用率。
調度器(主節(jié)點上)會負責在用戶級進行用戶選擇,在選定用戶后,再從該用戶的作業(yè)隊列內選取合適的作業(yè),最后將作業(yè)任務的啟動交給MapReduce框架中的任務跟蹤器TaskTracker(從節(jié)點上)。
對Hadoop系統(tǒng)的調度器和MapReduce框架進行改進,打破MapReduce并行計算框架中對于map資源槽和reduce資源槽的限制,在保證用戶之間公平性的同時,分別在用戶資源池內部和用戶資源池之間進行資源槽借用。如 圖2所示,用戶資源池內部的借用,即借用用戶資源池內的空閑資源槽給該用戶負載過重的資源槽。如圖3所示,用戶資源池之間的借用,即用戶可以借用其他用戶資源池的空閑資源槽。資源槽借用減少了資源槽空閑現象,盡可能使所有資源槽保持忙碌,從而提高了Hadoop集群的資源利用率。
如圖4所示,本發(fā)明實施例提供了一種資源管理方法,應用于Hadoop系統(tǒng)的主節(jié)點,該方法包括:
S401,獲取從節(jié)點的空閑資源槽信息;
其中,所述獲取從節(jié)點的空閑資源槽信息,包括:
接收到從節(jié)點發(fā)送的請求分配任務的心跳消息后,根據所述心跳消息中攜帶的空閑資源槽信息獲知所述從節(jié)點有空閑資源槽;
其中,所述空閑資源槽信息包括:資源槽類型信息;
其中,所述資源槽類型包括:map資源槽或reduce資源槽;
S402,從等待資源分配的用戶隊列中選取用戶,在選出用戶后,從所述用戶的待運行任務隊列中選取待運行任務,包括:根據所述空閑資源槽信息中的空閑資源槽類型信息,優(yōu)先從所述用戶的待運行任務隊列中選取與所述空閑資源槽類型匹配的待運行任務,在不存在與所述空閑資源槽類型匹配的待運行任務時,選取與所述空閑資源槽類型不同的待運行任務;
其中,所述從等待資源分配的用戶隊列中選取用戶,包括:
從所述等待資源分配的用戶隊列的頭部開始掃描所述用戶隊列;
每掃描到一個用戶,判斷所述用戶是否滿足分配條件,如所述用戶滿足所述分配條件,則掃描終止,如所述用戶不滿足所述分配條件,則掃描下一個用戶;
其中,所述分配條件包括:所述用戶具有滿足數據本地性要求的待運行任務;
其中,所述數據本地性要求是指:任務要處理的數據塊與分配給該任務的資源槽在同一個節(jié)點或同一機架上;
其中,在所述分配條件包含數據本地性要求時,從所述用戶的待運行任 務隊列中選取待運行任務,還包括:
如掃描完所有的用戶后未能選取到待運行任務,則從所述分配條件中去除數據本地性要求,重新從所述等待資源分配的用戶隊列的頭部開始掃描所述用戶隊列,每掃描到一個用戶,判斷所述用戶是否具有待運行任務,如所述用戶具有待運行任務,則掃描終止,從所述用戶的待運行任務隊列中選取待運行任務,如所述用戶沒有待運行任務,則掃描下一個用戶;
其中,所述等待資源分配的用戶隊列按照公平性算法對用戶進行排序;
其中,在同類型的待運行任務存在多個時,優(yōu)先選取等待時間長的待運行任務;
其中,用戶內部資源槽的借用是指:用戶在分配到資源槽后,分四種情況進行分析:1)第一種情況:判斷空閑資源槽是否為map槽且用戶有滿足本地性的map任務,若滿足該條件則會將map資源槽分配給map任務;2)第二種情況:判斷空閑資源槽是否為reduce槽且用戶有待執(zhí)行的reduce任務,若滿足該條件則將reduce資源槽分配給reduce任務;3)第三種情況:判斷空閑資源槽是否為map槽且用戶有待執(zhí)行reduce任務,若滿足該條件則借用map槽執(zhí)行reduce任務;4)第四種情況:判斷空閑資源槽是否為reduce槽且有滿足本地性的map任務,若滿足該條件則將reduce槽借用給map任務??梢钥闯?,用戶內部資源槽借用發(fā)生在上述第三種和第四種情況。
用戶之間資源槽的借用是指:在進行資源分配時首先會對用戶隊列按照優(yōu)先級排序。按照優(yōu)先級原則,該資源槽應該分配給優(yōu)先級最高的用戶。但是,很可能的情況是:該用戶可能沒有符合條件的任務,例如沒有reduce任務且沒有滿足數據本地性的map任務,所以可以將該資源槽借用給其他用戶。借用的實現就是通過掃描用戶隊列中下一個用戶,判斷下一個用戶是否具有滿足條件的任務,如果有則將該資源槽借給這個用戶,否則繼續(xù)依次掃描用戶隊列中的其他用戶。
S403,在成功選取到待運行任務后,將所述待運行任務分配給所述從節(jié)點;
其中,所述將所述待運行任務分配給所述從節(jié)點,包括:
向所述從節(jié)點返回所述心跳消息的響應消息,其中攜帶所述待運行任務的信息;
其中,主節(jié)點上的調度器負責調度并分配map任務或reduce任務給從節(jié)點;
如圖5所示,本發(fā)明實施例提供了一種資源管理方法,應用于Hadoop系統(tǒng)的從節(jié)點,該方法包括:
S501,檢測到空閑資源槽后,向主節(jié)點發(fā)送攜帶空閑資源槽信息的通知消息,所述空閑資源槽信息包括本節(jié)點的空閑資源槽的類型信息;
其中,所述向主節(jié)點發(fā)送攜帶所述空閑資源槽信息的通知消息,包括:
向主節(jié)點發(fā)送請求分配任務的心跳消息,其中攜帶空閑資源槽信息;
其中,所述資源槽類型包括:map資源槽或reduce資源槽;
S502,接收所述主節(jié)點為本節(jié)點的空閑資源槽分配的待運行任務并將接收到的待運行任務放入任務啟動隊列中;
可選地,所述接收所述主節(jié)點分配的待運行任務并將接收到的待運行任務放入任務啟動隊列中,包括:
將接收到的map任務放入map任務啟動隊列,將接收到的reduce任務放入reduce任務啟動隊列;
可選地,也可以將接收到的map任務和reduce任務放入同一個任務啟動隊列中;
S503,在所述任務啟動隊列非空且當前存在空閑資源槽時,從所述任務啟動隊列中取出待運行任務進行啟動;
可選地,所述在所述任務啟動隊列非空且當前存在空閑資源槽時,從所述任務啟動隊列中取出待運行任務進行啟動,包括:
如所述reduce任務啟動隊列非空且當前存在空閑資源槽,則從所述reduce任務啟動隊列中取出待運行任務進行啟動;
如所述reduce任務啟動隊列為空且所述map任務啟動隊列非空且當前存 在空閑資源槽,則從所述map任務啟動隊列中取出待運行任務進行啟動;
先啟動reduce任務有利于盡快結束作業(yè),釋放作業(yè)占用的資源。
可選地,也可以采用其他的策略啟動待運行任務;比如,如果將接收到的map任務和reduce任務放入同一個任務啟動隊列中,則可以順序從所述任務啟動隊列中取出待運行任務進行啟動;
其中,從節(jié)點上的任務跟蹤器(TaskTracker)負責啟動map任務或reduce任務;
如圖6所示,本發(fā)明實施例提供了一種資源管理裝置,應用于Hadoop系統(tǒng)的主節(jié)點,包括:
信息接收模塊601,用于獲取從節(jié)點的空閑資源槽信息;
任務調度模塊602,用于從等待資源分配的用戶隊列中選取用戶,在選出用戶后,從所述用戶的待運行任務隊列中選取待運行任務,包括:根據所述空閑資源槽信息中的空閑資源槽類型信息,優(yōu)先從所述用戶的待運行任務隊列中選取與所述空閑資源槽類型匹配的待運行任務,在不存在與所述空閑資源槽類型匹配的待運行任務時,選取與所述空閑資源槽類型不同的待運行任務;
信息發(fā)送模塊603,用于在成功選取到待運行任務后,將所述待運行任務分配給所述從節(jié)點。
其中,所述任務調度模塊602,用于從等待資源分配的用戶隊列中選取用戶,包括:
從所述等待資源分配的用戶隊列的頭部開始掃描所述用戶隊列;
每掃描到一個用戶,判斷所述用戶是否滿足分配條件,如所述用戶滿足所述分配條件,則掃描終止,如所述用戶不滿足所述分配條件,則掃描下一個用戶。
其中,所述分配條件包括:所述用戶具有滿足數據本地性要求的待運行任務。
其中,所述任務調度模塊602,用于在所述分配條件包含數據本地性要求時,從所述用戶的待運行任務隊列中選取待運行任務,還包括:如掃描完所有的用戶后未能選取到待運行任務,則從所述分配條件中去除數據本地性要求,重新從所述等待資源分配的用戶隊列的頭部開始掃描所述用戶隊列,每掃描到一個用戶,判斷所述用戶是否具有待運行任務,如所述用戶具有待運行任務,則掃描終止,從所述用戶的待運行任務隊列中選取待運行任務,如所述用戶沒有待運行任務,則掃描下一個用戶。
其中,所述信息接收模塊601,用于獲取從節(jié)點的空閑資源槽信息,包括:
接收到從節(jié)點發(fā)送的請求分配任務的心跳消息后,根據所述心跳消息中攜帶的空閑資源槽信息獲知所述從節(jié)點有空閑資源槽;
其中,所述資源槽類型包括:map資源槽或reduce資源槽。
如圖7所示,本發(fā)明實施例提供了一種資源管理裝置,應用于Hadoop系統(tǒng)的從節(jié)點,包括:
檢測及上報模塊701,用于向主節(jié)點發(fā)送攜帶空閑資源槽信息的通知消息,所述空閑資源槽信息包括本節(jié)點的空閑資源槽的類型信息;
接收及處理模塊702,用于接收所述主節(jié)點為本節(jié)點的空閑資源槽分配的待運行任務并將接收到的待運行任務放入任務啟動隊列中;
任務啟動模塊703,用于在所述任務啟動隊列非空且當前存在空閑資源槽時,從所述任務啟動隊列中取出待運行任務進行啟動。
其中,所述接收及處理模塊702,用于接收所述主節(jié)點分配的待運行任務并將接收到的待運行任務放入任務啟動隊列中,包括:
將接收到的map任務放入map任務啟動隊列,將接收到的reduce任務放入reduce任務啟動隊列;
所述任務啟動模塊703,用于在所述任務啟動隊列非空且當前存在空閑資源槽時,從所述任務啟動隊列中取出待運行任務進行啟動,包括:
如所述reduce任務啟動隊列非空且當前存在空閑資源槽,則從所述reduce任務啟動隊列中取出待運行任務進行啟動;
如所述reduce任務啟動隊列為空且所述map任務啟動隊列非空且當前存在空閑資源槽,則從所述map任務啟動隊列中取出待運行任務進行啟動。
其中,所述檢測及上報模塊701,用于向主節(jié)點發(fā)送攜帶所述空閑資源槽信息的通知消息,包括:
向主節(jié)點發(fā)送請求分配任務的心跳消息,其中攜帶空閑資源槽信息;
其中,所述資源槽類型包括:map資源槽或reduce資源槽。
如圖8所示,本發(fā)明實施例提供了一種資源管理系統(tǒng),包括:具有上述資源管理裝置的Hadoop系統(tǒng)主節(jié)點,和具有上述資源管理裝置的Hadoop系統(tǒng)從節(jié)點。
上述實施例提供的一種資源管理方法、裝置和系統(tǒng),通過對主節(jié)點上的調度器和從節(jié)點上的任務跟蹤器進行改進,打破了Hadoop系統(tǒng)中map槽只能運行map任務,reduce槽只能運行reduce任務的限制,盡可能使所有的資源槽都保持忙碌,從而提高Hadoop系統(tǒng)的資源利用率。
本領域普通技術人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關硬件完成,所述程序可以存儲于計算機可讀存儲介質中,如只讀存儲器、磁盤或光盤等??蛇x地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現,相應地,上述實施例中的各模塊/單元可以采用硬件的形式實現,也可以采用軟件功能模塊的形式實現。本發(fā)明不限制于任何特定形式的硬件和軟件的結合。
需要說明的是,本發(fā)明還可有其他多種實施例,在不背離本發(fā)明精神及 其實質的情況下,熟悉本領域的技術人員可根據本發(fā)明作出各種相應的改變和變形,但這些相應的改變和變形都應屬于本發(fā)明所附的權利要求的保護范圍。