楊 生 北京郵電大學(xué)數(shù)據(jù)科學(xué)中心碩士研究生劉 軍 北京郵電大學(xué)數(shù)據(jù)科學(xué)中心副教授劉 芳 北京郵電大學(xué)數(shù)據(jù)科學(xué)中心副教授
?
基于Petri網(wǎng)的Hadoop性能仿真系統(tǒng)的設(shè)計與實現(xiàn)
楊生北京郵電大學(xué)數(shù)據(jù)科學(xué)中心碩士研究生
劉軍北京郵電大學(xué)數(shù)據(jù)科學(xué)中心副教授
劉芳北京郵電大學(xué)數(shù)據(jù)科學(xué)中心副教授
摘要:隨著Hadoop在學(xué)術(shù)界和工業(yè)界的廣泛應(yīng)用,極大推動了大數(shù)據(jù)技術(shù)的發(fā)展,如何更為高效地使用Hadoop成為了業(yè)界關(guān)注的焦點。本文介紹了對Hadoop性能進行仿真的方法,及其實現(xiàn)機制。
關(guān)鍵詞:Hadoop;性能仿真;Petri網(wǎng);性能優(yōu)化;集群搭建
伴隨著Hadoop的出現(xiàn),其展現(xiàn)出的高效、易用、穩(wěn)定、擴展性好等諸多優(yōu)點,成為了學(xué)術(shù)界和工業(yè)界進行海量數(shù)據(jù)處理的首選方案,更是名符其實開啟大數(shù)據(jù)時代大門的金鑰匙。
數(shù)據(jù)驅(qū)動業(yè)務(wù)作為大數(shù)據(jù)時代的核心命題,如何完成海量數(shù)據(jù)的及時處理以滿足業(yè)務(wù)需求,一直是當(dāng)今業(yè)界最主流的研究方向。面對大型互聯(lián)網(wǎng)公司動輒過千臺的Hadoop集群規(guī)模,有效地提升計算效能尤為重要。其他各領(lǐng)域的公司也緊隨時代腳步發(fā)展了自身的數(shù)據(jù)分析部門,滿足業(yè)務(wù)需要并控制成本,則是這些公司更為注重的。因此,對Hadoop的數(shù)據(jù)處理能力進行預(yù)估,并提供集群優(yōu)化指導(dǎo)建議是非常有必要的。
但是通過傳統(tǒng)的測試對比分析的方法來評估Hadoop處理能力具有較大的局限性。首先,由于Hadoop作業(yè)往往完成耗時較長,測試實際運行情況效率低下;其次,Hadoop集群的配置參數(shù)復(fù)雜繁多,并且都會對性能產(chǎn)生影響,對比分析的方法代價高昂;最后,不同配置參數(shù)對性能產(chǎn)生的影響權(quán)重不同,并會由于處理Hadoop作業(yè)的不同,而產(chǎn)生變化。因此,本文將介紹使用仿真的方法來預(yù)測Hadoop的性能,并通過仿真結(jié)果提供集群配置優(yōu)化建議。
建立仿真模型來預(yù)測Hadoop性能之前,需要先對影響集群計算效能的參數(shù)進行抽象提取。從集群的物理計算能力來講,硬件的配置情況起著決定性作用;從Hadoop的體系結(jié)構(gòu)來講,HDFS和MapReduce分別都具備著影響作業(yè)執(zhí)行情況的因素;在集群和Hadoop兩者之外,在分布式環(huán)境中運行的具體Hadoop作業(yè)也會因為其計算需求復(fù)雜情況的各異,導(dǎo)致各自的執(zhí)行過程耗時不同。
根據(jù)參數(shù)的作用范圍不同,分為代表集群硬件特征的參數(shù)、代表Hadoop體系相關(guān)的配置參數(shù)、代表作業(yè)計算復(fù)雜程度的參數(shù)三大類(見表1)。

表1 仿真參數(shù)列表
Hadoop任務(wù)調(diào)度邏輯構(gòu)建在Petri網(wǎng)的仿真平臺的基礎(chǔ)之上,整體架構(gòu)如圖1所示。Petri網(wǎng)是1960年由卡爾·A·佩特里發(fā)明的數(shù)學(xué)模型,用于對離散的并行系統(tǒng)進行數(shù)學(xué)的表示,可以很好地描述異步的、并發(fā)的計算機系統(tǒng)模型。

圖2 仿真系統(tǒng)架構(gòu)圖
根據(jù)集群配置和程序參數(shù),可以推算出HDFS中的數(shù)據(jù)分布信息。這里筆者做了第一個假設(shè),認為在仿真模型中的每個數(shù)據(jù)分塊均是滿的。這可能會導(dǎo)致某些數(shù)據(jù)在實際存儲的數(shù)據(jù)分片數(shù)目與仿真模型的數(shù)據(jù)分片數(shù)目不一致。因為在實際環(huán)境中,由于很多文件的大小并不恰好與數(shù)據(jù)塊尺寸匹配,使得分片的數(shù)據(jù)量并不足以達到整個數(shù)據(jù)塊的最大容量。
同時,仿真模型會預(yù)估出可能進行的遠程調(diào)度任務(wù)的數(shù)據(jù)分片個數(shù)。非本地化執(zhí)行的作業(yè)數(shù)目,會對Hadoop性能表現(xiàn)產(chǎn)生非常巨大的影響。衡量這種情況發(fā)生的比例,稱之為遠程調(diào)度比例,當(dāng)數(shù)據(jù)分配不均,集群硬件差異較大時,這個比例也會隨之增加。根據(jù)遠程調(diào)度比例參數(shù),將HDFS中所有數(shù)據(jù)分塊劃分為本地作業(yè)、跨節(jié)點作業(yè)、跨機架作業(yè)及跨數(shù)據(jù)中心作業(yè)。對不同類型的作業(yè),根據(jù)其特征加以懲罰參數(shù),從而保證整個仿真過程的準確性。
根據(jù)硬件特征與集群的配置參數(shù),可以推測出這個實際集群的運算效能。運算效能包括兩方面,一是能夠同時進行并行計算的單元個數(shù);另一個是每個計算單元的單位時間計算能力。仿真系統(tǒng)將具有計算能力的每個單元認為是完全平等的,這源自MapReduce的實現(xiàn)機制。每個CPU核心被認為是一個計算單元,在模型中它作為一個令牌,用于觸發(fā)一個計算過程的執(zhí)行,當(dāng)計算結(jié)束后,這個令牌將被歸還。通過待處理的數(shù)據(jù)量和MapReduce程序的各階段復(fù)雜度,可以確定出計算需求。采用CPB(Cycles Per Byte)作為衡量程序復(fù)雜度的指標,CPB是處理單位數(shù)據(jù)量所需要的CPU時鐘周期。值得注意的是,每個階段的待處理數(shù)據(jù)量是發(fā)生變化的,仿真系統(tǒng)根據(jù)計算需求預(yù)測出各子階段的時間耗費。
通過搭建Hadoop集群測試環(huán)境,將Hadoop作業(yè)的各個階段執(zhí)行情況保存到日志中,并實現(xiàn)對相關(guān)仿真參數(shù)的提取。
由于不同Hadoop作業(yè)的業(yè)務(wù)需求不同,所以其對應(yīng)的Mapper和Reducer對于相同輸入數(shù)據(jù)量所需要的計算時間也不同,這里使用單位輸入數(shù)據(jù)量所需耗費的CPU時鐘周期為衡量標準。在Hadoop測試環(huán)境中,對相關(guān)類代碼的修改,日志能采集到對應(yīng)Mapper和Reducer任務(wù)啟動、內(nèi)存緩沖區(qū)讀取完成、任務(wù)結(jié)束等關(guān)鍵時間點。以Mapper過程為例,各日志記錄時間點如圖2所示。
其中,時間點A、C分別為Mapper任務(wù)啟動和結(jié)束的時間,時間點序列B為每組內(nèi)存緩存讀取完成的時間。為方便闡述,到達B點的時間將根據(jù)進入循環(huán)的次數(shù),分別稱之為B1、B2…Bn。時間點A至?xí)r間點B1,相鄰時間點Bi與Bi+1之間,包括了數(shù)據(jù)從硬盤讀入內(nèi)存緩沖去與數(shù)據(jù)計算的時間耗費。時間點Bn至?xí)r間點C,則為最后一個緩存進行計算所占用的時間。
根據(jù)Setup到第一次ReadBuffer結(jié)束的時間耗費和內(nèi)存緩沖區(qū)大小,可以計算出磁盤的平均讀取速率。根據(jù)最后一次ReadBuffer結(jié)束到Cleanup的時間減去平均計算時間,在考慮內(nèi)存緩沖區(qū)大小,可以計算出磁盤的平均寫入速率。根據(jù)兩次ReadBuffer間的時間耗費包含上一次緩沖區(qū)數(shù)據(jù)的計算時間和新一次緩沖區(qū)數(shù)據(jù)讀取的時間,進而計算出CPB。
日志中除根據(jù)各階段時間的統(tǒng)計之外,也包含了Hadoop本身的日志機制所記錄的各個階段所讀取寫出的數(shù)據(jù)量。通過統(tǒng)計Mapper的平均數(shù)據(jù)讀取產(chǎn)出比,可以推算出Shuffle階段所需要傳輸?shù)臄?shù)據(jù)量。在Shuffle階段,假定所有的中間數(shù)據(jù)被均勻的分配給所有的Reducer中,這里需要考慮存在Mapper與Reducer在同節(jié)點的情況,發(fā)生比例與總節(jié)點個數(shù)相關(guān),且近似等于(節(jié)點個數(shù)/Reducer)個數(shù),據(jù)此仿真出跨節(jié)點Shuffle數(shù)據(jù)的時間耗費。Reducer階段的仿真方法與Mapper階段類似,不再贅述。

圖2 Mapper日志時間點
通過仿真的方法來預(yù)測Hadoop集群的性能表現(xiàn),主要可以應(yīng)用于兩大方向。一是通過較小數(shù)據(jù)量的測試數(shù)據(jù)來預(yù)估處理海量數(shù)據(jù)的總體耗時,并通過在仿真系統(tǒng)中修改相關(guān)配置參數(shù),來比較計算效能的變化,從而為優(yōu)化性能提供指導(dǎo)建議,這是大型互聯(lián)網(wǎng)公司的主要需求;二是根據(jù)測試結(jié)果,推測在異構(gòu)集群環(huán)境中,為達到實際所需的計算效能所需構(gòu)建的集群規(guī)模,這對于需要進行成本控制的集群搭建有著重要的指導(dǎo)意義。本文將從這兩方面對仿真系統(tǒng)進行應(yīng)用測試說明。
在Hadoop集群中,由于HDFS數(shù)據(jù)分塊尺寸會對整體的計算效能產(chǎn)生影響,為了驗證這種影響,對不同輸入數(shù)據(jù)量情況下,64和128MB數(shù)據(jù)分塊尺寸的WordCount作業(yè)執(zhí)行時間進行了對比。Hadoop集群環(huán)境參數(shù)如表2所示。

表2 Hadoop集群環(huán)境參數(shù)表
根據(jù)對3、15、30、60、120GB5組輸入數(shù)據(jù)規(guī)模的仿真結(jié)果,可以發(fā)現(xiàn)在輸入數(shù)據(jù)量超過30GB后,通過增大HDFS數(shù)據(jù)分片大小,可以有效地提高Hadoop作業(yè)的運行表現(xiàn)。Hadoop作業(yè)仿真時間如表3所示。
為了進一步驗證仿真結(jié)果的準確性,在搭建Hadoop集群中進行了實際測試,對比結(jié)果如表4、5所示。
通過比較兩者的擬合程度,可以發(fā)現(xiàn)仿真模型在預(yù)測Hadoop集群配置改變的情況下,可以保證平均誤差小于5%,并隨著輸入數(shù)據(jù)量的增長擬合程度呈現(xiàn)上升趨勢。在實際環(huán)境中,更改Hadoop集群的參數(shù)配置需要重新啟動集群才能生效,因此直接進行集群參數(shù)調(diào)試代價高昂,借助仿真系統(tǒng)可以極大的簡化這個過程,對于優(yōu)化Hadoop集群性能方面意義重大。

表3 HDFS分塊影響仿真對比表

表4 HDFS分塊64MB結(jié)果表

表5 HDFS分塊128MB結(jié)果表
通過修改仿真模型的集群硬件參數(shù),可以實現(xiàn)異構(gòu)集群條件下作業(yè)執(zhí)行時間的預(yù)測,從而為實現(xiàn)滿足特定業(yè)務(wù)條件下的集群搭建,提供成本控制指導(dǎo)建議。測試中,對異構(gòu)Hadoop集群相對地減少了節(jié)點個數(shù)和CPU核心數(shù)量,計算能力有所下降,具體參數(shù)如表6所示。

表6 異構(gòu)Hadoop集群參數(shù)表
使用仿真系統(tǒng)預(yù)測異構(gòu)集群環(huán)境下WordCount作業(yè)的執(zhí)行時間,并將預(yù)測結(jié)果與在實際環(huán)境下的測試結(jié)果進行對比,結(jié)果參見表7。

表7 集群環(huán)境變化仿真結(jié)果表
通過比較兩者的擬合程度,可以發(fā)現(xiàn)仿真模型在預(yù)測異構(gòu)Hadoop集群可以保證平均誤差小于5%,借助仿真系統(tǒng)來預(yù)估Hadoop作業(yè)的執(zhí)行時間,為集群環(huán)境的搭建提供了明確的指導(dǎo)。
專家視點
Design and implementation of Hadoopperformance simulation system basedonPetri-net
YANGSheng,LIUJun,LIUFang
Abstract:AsHadoop is widely used in academia and industry, the big data technology has been greatly promoted.The efficient of Hadoop become the focus of attention.The design and implementation of Hadoop performance simulation are introduced in this article.
Keywords:Hadoop; performance-simulation; Petri-net; performance-optimization cluster-structure
收稿日期:(2016-03-20)