任桂山 劉夢澤 陳學梅 李紅艷 徐朝農
1(中國石油大港油田公司采油工藝研究院 天津 300280) 2(中國石油大學地球物理與信息工程學院 北京 102249)
現今,很多服務性公司都有龐大的客戶群以及客戶在使用過程中產生的數據資料信息。隨著我們對這些海量數據進行計算、分析的需求的提升,各種各樣的計算挑戰也隨之而來。其中最主要的挑戰就是降低處理這些數據過程中產生的計算能耗。2010年全球數據中心耗電量達到全球總耗電量的1%~1.5%,到2012年全球數據中心耗電量為占全球總用電量的2%[1],而2016達到了3%,并且隨著數據中心數量和規模的擴張電量消耗仍在以每年15%的速率不斷增長[2]。2016年全球數據中心電量消耗已經達到1 520億千瓦時,且仍以每五年翻一倍的速度快速增長,電費成為數據中心建造的需首要考慮的問題之一[3]。2011年IT領域電量消耗導致的二氧化碳排放量占全球總排放量的2%,按照現有的增速計算,到2020年,排放量將是現有排量的兩倍。我國的數據中心也存在相同的情況而且計算電量使用的效率和國際平均水平有一定的差距,截至2015年數據中心總量已經超過40萬,年用電量超過社會用電量的1.5%,平均電能使用效率(PUE)普遍大于2.2[4]。因此無論是從降低數據中心成本還是從環境保護的層面出發,研究海量數據處理任務的節能調度技術都是勢在必行的。
一般數據中心使用少則數十個,多則成百上千個節點處理數據,其中絕大多數采用MapReduce作為數據處理思想。MapReduce是谷歌提出的一種關于超大量數據并行計算的編程模型[5]。MapReduce將任務處理劃分為Map和Reduce兩個階段,分別對數據進行映射和歸約。Hadoop是現今實現MapReduce思想的主流并行計算框架,它默認提供FIFO、容量以及公平調度方式。這些調度方式著重考慮負載平衡和執行效率,忽略了處理能耗的問題。
現有對MapReduce集群中任務調度的研究側重對任務執行時長和負載均衡的優化。絕大部分基于MapReduce的應用對執行時長沒有較高的需求,而在異構集群中負載均衡不可避免地帶來能量利用率低的問題。因此,近年來,MapReduce的性能優化問題得到了廣泛的研究,關注點主要集中在執行時間、任務負載以及功耗優化上。
Yao等[7]研究了任務之間具有依賴性的前提下,執行時間最優化的問題。Ibrahim等[8]根據MapReduce中數據的本地性,將任務和其數據分到同一節點從而優化總任務執行時間。針對大型電商網站任務規模小,數量大的特點,Ren等[9]提出了最優化執行時間調度算法Fair4S。另外,Pastorelli等[10]考慮在任務切片大小不同且已預估出每個任務大小的情況。Wolf等[11]為公平調度器增加了彈性的特點,從而保證響應時間最短。Verma提出了一個叫ARIA(資源自動分析分配)的框架,通過分配Map slot和Reduce slot的數量使得MapReduce執行性能得到優化。
在負載均衡的優化上,Polo等[12]通過定時獲取數據的處理情況,動態調整資源分布,Nanduri等[13]的啟發式策略避免將當前任務分配到過載的機器上。另外,Sandholm等[14]提出了一個有動態的優先級的Hadoop并行調度器,并且給出一個可以由用戶自己定制任務分配方式以及執行先后順序,從而達到按規定的時間以及用戶想要的方式執行[14]。
Kurazumi等提出了一個動態的slot調度技術針對IO密集型任務進行調度,從而在IO等待的時間高效利用處理器資源的目的。Tian等[16]針對MapReduce Job強周期性的特點,在節點空閑的時間關閉節點從而降低整體能耗。Narayanan[17]根據數據訪問頻率將數據分到不同的磁盤上并對訪問頻率低的磁盤進行節能處理,達到在存儲上節能的目的。Salehi等[18]根據任務優先級、密集程度、剩余執行時長等,使用DVFS(動態電壓頻率調節)和DPM(動態電源管理)技術來優化功耗。Mashayekhy等[20]預測了每個任務的執行功耗和執行時間,建立功耗模型,并使用貪心策略對問題求解,然而他以slot為研究對象而不是與實際更契合的節點。
針對基于MapReduce的應用對低能耗的迫切需求,本文建立了以低能耗為目標的任務調度模型,分析了執行能耗過高的因素。另外,和其他降低能耗的工作不同的是,本文在MapReduce的節能方面做了如下工作:使用了更切合實際的能耗模型,對基于任務分配的功耗最優化問題進行建模;通過優化工具對問題進行求解,并在GridSim模擬的分布式環境中對任務的執行功耗進行評估和分析,揭示了調度策略時限和能耗的關系。
如圖1所示,一個MapReduce集群通常將不同執行能力的節點整合起來,而每個節點根據自己的執行資源(處理器核心數、磁盤大小、內存大小等)被等分成一定數量的slot。這些slot是虛擬執行概念并非實體的物理結構,Map-Reduce任務便在這些slot中執行。執行一個MapReduce Job需要將以Key-Value形式存儲的數據讀取出來,這些數據默認以每塊64 MB存儲在分布式存儲中,假設一共需要處理BM塊。而后在執行 Map階段時,JobTracker將這些數據塊作為任務塊分配到集群的各個處理節點的Map slot中處理。Map階段執行完畢,經過聚合以及洗牌之后共有BR個任務塊,將這BR個任務塊再分配到各個節點中的Reduce slot中執行Reduce階段,最后將結果寫回分布式存儲中。我們使用(BM,BR)表示一個MapReduce Job。

圖1 MapReduce執行流程示意圖


(1)
(2)
式中:Ci是和節點相關的常數,f是處理器頻率(固定值),根據頻率上限最低的節點得出,vi表示該頻率下該處理器電壓。

(3)
(4)


圖2描述了一個含有Si={S1,S2,S3}三個執行節點的集群中Map階段調度策略的執行過程。其中S1、S2和S3各有4個、6個和5個Map slot。

圖2 Map階段調度策略
由此可知,Mi={4,6,5},需要處理BM=37個Map任務,各個節點Si在Map階段執行任務的時間是TM={T1,T2,T3}。使得Map階段執行功耗最小:
s.t.



由于該問題是典型的組合優化問題,因此很難快速求解。本文采用成熟的優化工具CPLEX進行求解。
本節采用GridSim工具進行實驗。Gridsim是一個對大型分布式系統進行資源和應用調度的網格模擬工具,使用它可以對大型的異構分布式系統進行大量資源、海量數據調度和大量用戶的場景進行仿真。本次實驗使用的是GridSim 5.2 beta版本。按照表1以及其后描述的實驗規則分別在15個節點和25個節點的集群中進行實驗,且每個節點中的slot的數量服從均勻分布Ai~U(8,30),Map slot的數量服從離散均勻分布Mi~U(1,Ai)。同理可得Reduce slot的數量分布。使用TeraSort和K-means的執行效果作為評價標準。將本文模型與默認調度器以及ARIA中的SLO調度器的能耗效果進行對比分析。實驗設置如表1所示。
實驗過程中將執行TeraSort過程在實驗1到實驗4的時間限制分別設置為180、280、200和300 s;執行K-means聚類過程的時間限制分別設置為200、300、220和320 s。
實驗1以180 s作為時間限制執行TeraSort。本文調度模型和ARIA框架的SLO調度器分別在175 s和170 s執行完畢。由圖3可知,本文調度模型和ARIA框架隨著時間限制的增長,功耗在不斷降低,說明時間限制是影響最終執行功耗的一個重要因素。但在實際生產的處理過程中,時間限制不能無限制的增加,管理員仍然需要一個合適的時間約束來使得結果有一定的實時性。而在時間限制達到260 s以后,執行功耗下降趨平,說明此時集群接近兩者執行功耗降低的極限。

圖3 實驗1執行TeraSort功耗與時間限制關系圖
由圖4和圖5可以看到執行TeraSort和K-means聚類兩個比較標準,本文模型相比默認調度策略和ARIA框架的SLO調度器執行功耗都有明顯下降。相對于默認調度策略平均下降了29.7%,相對SLO調度器平均下降19%。在執行K-means的實驗4中,本文模型相比默認策略降低了34%,即295 106 J,執行實驗1的TeraSort過程中也有26%的下降。執行K-means的實驗1中,相比SLO調度器有21%的下降,即108 012 J。不論是執行TeraSort還是K-means,本文模型相比默認策略的節能比率大致上隨任務的增多而增大。

圖4 TeraSort各實驗功耗對比圖

圖5 K-means各實驗功耗對比圖
針對當今數據中心能耗巨大的問題,原來提出的DVFS、參數優化和虛擬機配置都起到了提高能源利用率、降低能耗的作用。而本文通過建立能耗調度模型,優化不同執行能力節點上的任務分配數量從而達到降低能耗的目的。通過實驗結果可以看到,該方法比默認和ARIA有更好的節能效果。