李耘書 滕飛 李天瑞
摘 要:Hadoop作為大規(guī)模分布式數(shù)據(jù)處理框架已經(jīng)在工業(yè)界得到廣泛的應(yīng)用,針對(duì)手動(dòng)和經(jīng)驗(yàn)調(diào)優(yōu)方法中參數(shù)空間龐大和運(yùn)行流程復(fù)雜的問題,提出了一種Hadoop參數(shù)自動(dòng)優(yōu)化的方法和分析框架。首先,對(duì)作業(yè)運(yùn)行流程進(jìn)行解耦,從可變參數(shù)直接影響的更細(xì)粒度的角度定義微操作,從而分析參數(shù)和單次微操作執(zhí)行時(shí)間的關(guān)系;然后,利用微操作對(duì)作業(yè)運(yùn)行流程進(jìn)行重構(gòu),建立參數(shù)和作業(yè)運(yùn)行時(shí)間關(guān)系的模型;最后,在此模型上應(yīng)用各類搜索優(yōu)化算法高效快速得出優(yōu)化后的系統(tǒng)參數(shù)。在terasort和wordcount兩個(gè)作業(yè)類型上進(jìn)行了實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明,相對(duì)于默認(rèn)參數(shù)情況,該方法使作業(yè)執(zhí)行時(shí)間分別縮短了至少41%和30%。該方法能夠有效提高Hadoop作業(yè)執(zhí)行效率,縮短作業(yè)執(zhí)行時(shí)間。
關(guān)鍵詞:Hadoop;參數(shù)調(diào)優(yōu);微操作;重構(gòu);搜索算法
中圖分類號(hào): TP311.13
文獻(xiàn)標(biāo)志碼:A
Abstract: As a large-scale distributed data processing framework, Hadoop has been widely used in industry during the past few years. Currently manual parameter optimization and experience-based parameter optimization are ineffective due to complex running process and large parameter space. In order to solve this problem, a method and an analytical framework for Hadoop parameter auto-optimization were proposed. Firstly, the operation process of a job was broken down into several microoperations and the microoperations were determined from the angle of finer granularity directly affected by variable parameters, so that the relationship between parameters and the execution time of a single microoperation was able to be analyzed. Then, by reconstructing the job operation process based on microoperations, a model of the relationship between parameters and the execution time of whole job was established. Finally, various searching optimization algorithms were applied on this model to efficiently and quickly obtain the optimized system parameters. Experiments were conducted with two types of jobs, terasort and wordcount. The experimental results show that, compared with the default parameters condition, the proposed method reduce the job execution time by at least 41% and 30% respectively. The proposed method can effectively improve the job execution efficiency of Hadoop and shorten the job execution time.
Key words: Hadoop; parameter optimization; microoperation; reconstitution; search algorithm
0 引言
Google在早年提出了最原始的用于大規(guī)模數(shù)據(jù)并行處理的分布式架構(gòu)模型MapReduce[1-2],在幫助企業(yè)解決大數(shù)據(jù)處理效率的問題上邁出了很大的一步。隨著處理數(shù)據(jù)的規(guī)模越來越大,提升優(yōu)化Hadoop的性能和數(shù)據(jù)處理的時(shí)效性成為研究重點(diǎn)。Hadoop系統(tǒng)擁有200多個(gè)可配置參數(shù),雖然默認(rèn)參數(shù)配置經(jīng)過精心設(shè)計(jì),但是由于多種多樣的任務(wù)類型使得大多數(shù)情況的任務(wù)執(zhí)行效率并不高。Hadoop中對(duì)性能有影響的參數(shù)繁多,雖然Hadoop2.0對(duì)少量參數(shù)進(jìn)行了修改和刪除,但面對(duì)復(fù)雜的作業(yè)類型,依靠人工對(duì)Hadoop系統(tǒng)進(jìn)行調(diào)優(yōu)依然是一個(gè)充滿挑戰(zhàn)的任務(wù)[3-4]。
本文提出一種基于微操作重構(gòu)的Hadoop參數(shù)自動(dòng)調(diào)優(yōu)方法,該方法通過建立比階段更細(xì)粒度的微操作模型來刻畫參數(shù)變化和單次微操作執(zhí)行時(shí)間的關(guān)系,再基于運(yùn)行原理對(duì)微操作模型進(jìn)行組合得到階段(phase)執(zhí)行時(shí)間和參數(shù)的關(guān)系,在此基礎(chǔ)上可以應(yīng)用不同算法搜索找出優(yōu)化參數(shù)。綜上所述,本文的主要工作如下:
1)提出了微操作模型的概念。該模型能夠直觀準(zhǔn)確地描述系統(tǒng)參數(shù)變化對(duì)執(zhí)行時(shí)間帶來的影響,從數(shù)據(jù)流的角度使得對(duì)多參數(shù)同時(shí)變化時(shí)作業(yè)執(zhí)行時(shí)間變化的分析變得方便且準(zhǔn)確,同時(shí)建立了單次微操作執(zhí)行時(shí)間與配置參數(shù)之間的函數(shù)關(guān)系。
2)提出了微操作模型求解方法,通過基準(zhǔn)測試運(yùn)行簡單的實(shí)際作業(yè)來建模求解模型參數(shù),得到微操作模型。
3)提出了一種利用微操作對(duì)運(yùn)行過程進(jìn)行解構(gòu)重構(gòu)的策略。該方法不隨作業(yè)類型和集群配置變化而變化,同時(shí)查找最優(yōu)參數(shù)具有耗時(shí)短、效率高、可移植性好的優(yōu)點(diǎn)。該方法可視為一種優(yōu)化問題的描述方法和分析框架,從更細(xì)粒度的角度刻畫參數(shù)變化原理,建立模型尋找最優(yōu)參數(shù)組合。
1 相關(guān)工作
近年來,關(guān)于Hadoop參數(shù)自動(dòng)調(diào)優(yōu)的研究吸引了眾多研究者的參與。基于成本分析的(cost-based)方法通過預(yù)測未知任務(wù)各類資源的利用情況,最大化資源利用率使得作業(yè)運(yùn)行時(shí)間更短。文獻(xiàn)[5]利用動(dòng)態(tài)作業(yè)分析來捕獲Map階段和Reduce階段的運(yùn)行行為幫助用戶微調(diào)Hadoop作業(yè)參數(shù);文獻(xiàn)[6]通過改變MapReduce的執(zhí)行策略來提高shuffling和sorting操作的執(zhí)行效率來提升整個(gè)MapReduce過程的性能。cost-based性能建模是一種較成熟的方法,但是它是一種白盒建模方法,需要研究者對(duì)非常復(fù)雜的系統(tǒng)內(nèi)部組件有很好的了解,包括軟件系統(tǒng)和硬件系統(tǒng),這一點(diǎn)給用戶帶來了巨大挑戰(zhàn)。基于機(jī)器學(xué)習(xí)(Machine Learning-based, ML-based)的性能建模是一種基于機(jī)器學(xué)習(xí)的調(diào)優(yōu)模型 [7-13]。文獻(xiàn)[7]主要應(yīng)用各類回歸算法來分析建模;文獻(xiàn)[9]通過神經(jīng)網(wǎng)絡(luò)來預(yù)測作業(yè)時(shí)間再進(jìn)行調(diào)優(yōu)。ML-based方法在龐大的參數(shù)空間內(nèi)收集訓(xùn)練樣本,選擇機(jī)器學(xué)習(xí)模型用于訓(xùn)練自動(dòng)調(diào)優(yōu),在給定任務(wù)類型的情況下自動(dòng)給出最優(yōu)參數(shù)集。它是一個(gè)黑盒模型,建立在對(duì)特定任務(wù)類型和系統(tǒng)實(shí)際性能表現(xiàn)的觀察基礎(chǔ)上,不需要詳細(xì)的系統(tǒng)內(nèi)部信息;但它在收集訓(xùn)練數(shù)據(jù)非常困難,需耗費(fèi)大量時(shí)間,實(shí)際應(yīng)用效率并不高。基于搜索(Search-based)調(diào)優(yōu)模型是一種利用搜索算法的自動(dòng)調(diào)優(yōu)模型[14-16]。Search-based調(diào)優(yōu)模型將所有會(huì)影響Hadoop性能的關(guān)鍵參數(shù)構(gòu)成一個(gè)參數(shù)空間,利用搜索算法如文獻(xiàn)[14]采用遺傳算法、文獻(xiàn)[16]采用遞歸隨機(jī)抽樣,通過在實(shí)際集群中迭代執(zhí)行作業(yè)任務(wù),在參數(shù)空間中自動(dòng)迭代搜索優(yōu)化的參數(shù)組合。該方法和ML-based方法相比,不用構(gòu)造完整參數(shù)空間的訓(xùn)練樣本,在獲取樣本的時(shí)間上會(huì)有所減少。但是,針對(duì)不同的任務(wù)類型,參數(shù)的影響方式不同,搜索策略也會(huì)隨之改變;同時(shí),在收集樣本時(shí)需要執(zhí)行大量的實(shí)際作業(yè),優(yōu)化過程耗費(fèi)時(shí)間長也是其主要缺點(diǎn)。
2 建模策略
本章主要介紹微操作模型的相關(guān)概念和微操作模型的建立方法。
2.1 MapReduce運(yùn)行原理
一個(gè)MapReduce Job可以分為Map stage 和 Reduce stage兩個(gè)主要過程,一個(gè)stage由多個(gè)task組成,例如map task和reduce task,而一個(gè)task可以分為多個(gè)按順序執(zhí)行的phase。如圖1所示,對(duì)MapReduce任務(wù)按照運(yùn)行流程進(jìn)行解構(gòu)。MapReduce任務(wù)可以分為兩個(gè)主要過程:
1)Map stage。Map stage中多輪map task組依次執(zhí)行,每輪中多個(gè)map task并行處理數(shù)據(jù),map task運(yùn)行過程分為三個(gè)階段:read phase,map phase和collection phase。其中參數(shù)對(duì)性能有較大影響的是collection phase,其余兩個(gè)階段中參數(shù)對(duì)性能的影響并不明顯,所以本文方法在map task中主要對(duì)collection phase進(jìn)行分析,得到參數(shù)和collection phase運(yùn)行時(shí)間的關(guān)系。
2)Reduce stage。Reduce stage中同樣存在多輪reduce task,每輪多個(gè)reduce task組并行處理數(shù)據(jù),每個(gè)reduce task從多個(gè)map輸出中獲取所需數(shù)據(jù),最終將處理結(jié)果輸出磁盤。reduce task的運(yùn)行過程分為三個(gè)階段:shuffle phase,reduce phase和sort_write phase。其中參數(shù)對(duì)性能由較大影響的是shuffle phase,所以本文方法在reduce task中只對(duì)shuffle phase從微操作的角度進(jìn)行分析,得到參數(shù)和shuffle phase運(yùn)行時(shí)間的關(guān)系。在sort_write phase中,雖然沒有參數(shù)對(duì)其性能有直接影響,但是shuffle phase中的某些參數(shù)對(duì)sort_write phase的性能有間接的影響,所以后面章節(jié)也會(huì)對(duì)sort_write phase階段進(jìn)行分析介紹。
在眾多參數(shù)中,關(guān)于決定map task并行個(gè)數(shù)的參數(shù)map.cpu.vcores和map.memory.mb、決定map task輸入數(shù)據(jù)塊大小的參數(shù)dfs.blocksize、決定reduce task并行個(gè)數(shù)的參數(shù)reduce.cpu.vcores和reduce.memory.mb,以及決定reduce task個(gè)數(shù)的參數(shù)mapred.reduce.task等參數(shù)的經(jīng)驗(yàn)調(diào)優(yōu)已有大量研究 [4],本文的調(diào)優(yōu)目標(biāo)主要針對(duì)那些依靠經(jīng)驗(yàn)調(diào)優(yōu)較具挑戰(zhàn)的參數(shù)。map task輸入數(shù)據(jù)塊的大小一般視實(shí)際作業(yè)執(zhí)行需求和并行個(gè)數(shù)而定,通常為128MB和256MB。map task并行個(gè)數(shù)參數(shù)通常和輸入數(shù)據(jù)塊大小配合設(shè)置,小數(shù)據(jù)量作業(yè)時(shí)所有數(shù)據(jù)在一輪處理完,數(shù)據(jù)量較大時(shí)根據(jù)實(shí)際內(nèi)存在每一輪中分配盡量多的并行map task個(gè)數(shù)使得性能最大化。reduce task并行個(gè)數(shù)通常設(shè)置為使得性能最大化的個(gè)數(shù),根據(jù)實(shí)際內(nèi)存分配盡量多的并行個(gè)數(shù),所有reduce task盡量在一輪中處理完。在某些業(yè)務(wù)中,這些參數(shù)的值根據(jù)業(yè)務(wù)需求已經(jīng)確定,不屬于可變參數(shù),所以本文主要針對(duì)map task和reduce task個(gè)數(shù)都確定的情況進(jìn)行調(diào)優(yōu),對(duì)如表1所示的本文涉及的參數(shù)空間內(nèi)的參數(shù)進(jìn)行調(diào)節(jié)。
2.2 微操作定義
一個(gè)map task分為三個(gè)階段:read phase、map phase和collection phase。其中參數(shù)對(duì)性能有較大影響的是collection phase,在該階段中,定義兩種類型的微操作:
1)將輸入數(shù)據(jù)寫入到內(nèi)存,內(nèi)存大小由參數(shù)io.sort.mb決定,定義內(nèi)存寫微操作cm_mic_op。
2)當(dāng)內(nèi)存數(shù)據(jù)寫入量到達(dá)閾值時(shí)觸發(fā)磁盤寫操作,將內(nèi)存中所有數(shù)據(jù)寫入磁盤,閾值由參數(shù)sort.spill.percent決定,定義磁盤寫微操作cd_mic_op。
微操作的意義在通過參數(shù)可以定量分析某次微操作處理的數(shù)據(jù)量,從而得到微操作時(shí)間。
同樣,一個(gè)reduce task分為三個(gè)階段:shuffle phase、reduce phase和sort_write phase。其中參數(shù)對(duì)性能有較大影響的是shuffle phase,在該階段中定義三種類型的微操作:
1)從map端拉取輸入數(shù)據(jù)存入內(nèi)存,內(nèi)存空間大小由參數(shù)reduce.java.opts和參數(shù)shuffle.input.buffer.percent決定,定義單次內(nèi)存寫操作為微操作sm_mic_op。
2)當(dāng)內(nèi)存寫達(dá)到閾值時(shí),將內(nèi)存中的數(shù)據(jù)按照閾值大小寫入磁盤存為本地文件。閾值由參數(shù)shuffle.merge.percent決定,定義單次磁盤寫微操作sd_mic_op。
3)當(dāng)寫入磁盤的本地文件個(gè)數(shù)到達(dá)閾值時(shí),在磁盤中進(jìn)行文件合并,將閾值個(gè)數(shù)的文件合并為一個(gè)大文件,閾值由io.sort.factor決定,定義單次merge操作為磁盤合并微操作merge_mic_op。
參數(shù)對(duì)shuffle phase階段性能的影響直接體現(xiàn)在這三種類型的微操作中,通過分析參數(shù)變化對(duì)微操作處理數(shù)據(jù)量的影響,可以得到參數(shù)變化對(duì)階段運(yùn)行時(shí)間所造成的影響。
本節(jié)在參數(shù)對(duì)性能有較大影響的階段中定義了幾種微操作方式,在其余階段,參數(shù)對(duì)其性能影響較小,本文不予討論,僅通過優(yōu)化上述階段中的參數(shù)即可達(dá)到優(yōu)化整個(gè)作業(yè)的目的。
2.3 微操作基準(zhǔn)測試
在2.2節(jié)中定義了幾種不同階段的微操作,在本節(jié)將介紹如何建立微操作模型,得到微操作執(zhí)行時(shí)間與參數(shù)的關(guān)系。
Hadoop中參數(shù)影響性能的本質(zhì)在于,參數(shù)值不同時(shí)單次微操作處理的數(shù)據(jù)量不同,而內(nèi)存寫和磁盤寫微操作在處理不同大小的數(shù)據(jù)時(shí)速率不同,同時(shí)總數(shù)據(jù)量一定時(shí)微操作執(zhí)行的總次數(shù)會(huì)因?yàn)閱未挝⒉僮魈幚淼臄?shù)據(jù)量不同而變化,所以參數(shù)通過影響內(nèi)存寫和磁盤寫微操作的總執(zhí)行次數(shù)和單次微操作速率影響作業(yè)總執(zhí)行時(shí)間。通過確定單次微操作在不同參數(shù)值下處理數(shù)據(jù)的速率,再完成所有數(shù)據(jù)處理流程得到微操作執(zhí)行次數(shù),即可得到階段總時(shí)間。接下來介紹如何建立微操作速率模型。
與Map task的collection phase中兩種微操作相關(guān)的系統(tǒng)參數(shù)是io.sort.mb和sort.spill.percent,這兩個(gè)參數(shù)決定了內(nèi)存寫入時(shí)的空間大小和觸發(fā)磁盤寫操作的閾值。將這兩個(gè)參數(shù)值設(shè)為不同的離散值,并使用相應(yīng)參數(shù)值在實(shí)際集群中執(zhí)行實(shí)際的單map task任務(wù),在系統(tǒng)執(zhí)行日志中收集內(nèi)存寫和磁盤寫在不同數(shù)據(jù)量下的速率表現(xiàn),通過擬合速率和數(shù)據(jù)量大小的關(guān)系建立微操作速率模型,通過速率和數(shù)據(jù)量即可得到執(zhí)行時(shí)間。該基準(zhǔn)測試的目的在于測試出cm_mic_op和cd_mic_op處理不同大小數(shù)據(jù)時(shí)的速率表現(xiàn),只需執(zhí)行簡單的單map task任務(wù),執(zhí)行時(shí)間短,建模效率高,這里高效率的建模方式也是本方法可移植性好的根本體現(xiàn)?;鶞?zhǔn)測試時(shí)任務(wù)類型須和目標(biāo)作業(yè)類型相同,因?yàn)椴煌鳂I(yè)的數(shù)據(jù)結(jié)構(gòu)不同,微操作的速率也就可能不同,需要建立不同的微操作模型。
與Reduce task的shuffle phase中三種微操作相關(guān)的系統(tǒng)參數(shù)是reduce.java.opts、shuffle.input.buffer.percent、shuffle.merge.percent和io.sort.factor,這四個(gè)參數(shù)是reduce task中影響性能的主要參數(shù),其決定了內(nèi)存寫入時(shí)的空間大小和觸發(fā)磁盤寫操作的閾值,以及在磁盤進(jìn)行文件合并時(shí)的閾值。同樣,這些參數(shù)對(duì)時(shí)間性能的影響主要體現(xiàn)在影響微操作處理的數(shù)據(jù)量大小。為了建立sm_mic_op、sd_mic_op和merge_mic_op的速率模型,將這幾個(gè)參數(shù)值設(shè)為不同的離散值,并使用相應(yīng)參數(shù)值在集群中執(zhí)行實(shí)際的單reduce任務(wù),然后在系統(tǒng)日志中收集不同操作在不同數(shù)據(jù)量下的速率表現(xiàn),通過擬合微操作執(zhí)行速率和數(shù)據(jù)量大小的關(guān)系建立模型,通過速率和數(shù)據(jù)量便可得到執(zhí)行時(shí)間。這里建立的內(nèi)存寫微操作sm_mic_op可以看作是網(wǎng)絡(luò)傳輸速率模型。通過定義微操作的方式定量地分析網(wǎng)絡(luò)傳輸速率和數(shù)據(jù)量大小的關(guān)系,在對(duì)reduce端的微操作進(jìn)行基準(zhǔn)測試時(shí),map端的task需能完整體現(xiàn)網(wǎng)絡(luò)結(jié)構(gòu)的性能,即在每一個(gè)nodemanager中都需要執(zhí)行map task,存儲(chǔ)中間數(shù)據(jù)供reduce task拉取。由于只是測試單reduce task作業(yè),所以數(shù)據(jù)量無需過大,以測試效率為主。
在集群和作業(yè)類型固定的情況下,本文假設(shè)微操作速率符合以下線性模型:
3 作業(yè)重構(gòu)與優(yōu)化
3.1 作業(yè)重構(gòu)
在本節(jié)中,將詳細(xì)介紹如何根據(jù)建立好的微操作模型重構(gòu)得到階段(phase)的原始運(yùn)行過程,從而得到階段運(yùn)行時(shí)間和參數(shù)的關(guān)系。
在第2章中,對(duì)兩個(gè)階段進(jìn)行了解構(gòu),針對(duì)不同的階段,利用該階段定義的微操作對(duì)該階段的運(yùn)行流程進(jìn)行重構(gòu)。Map task中的collection phase,作如下定義:
其中:記參數(shù)io.sort.mb的值為x,參數(shù)sort.spill.percent的值為y;Tc表示collection phase執(zhí)行時(shí)間;cm_mic_op微操作時(shí)間模型表示為M(a),a表示輸入數(shù)據(jù)量大小,返回處理時(shí)間;cd_mic_op微操作時(shí)間模型表示為D(a),a表示輸入數(shù)據(jù)量大小;Din表示collection phase處理數(shù)據(jù)的總大小。
當(dāng)?shù)谝淮蝺?nèi)存寫達(dá)到閾值時(shí),觸發(fā)磁盤寫操作并將寫入了數(shù)據(jù)的內(nèi)存空間鎖定(內(nèi)存空間被鎖定后,不再有數(shù)據(jù)寫入),與此同時(shí),內(nèi)存寫操作會(huì)繼續(xù)在剩余空閑的內(nèi)存空間內(nèi)寫入數(shù)據(jù)直到當(dāng)次磁盤寫操作結(jié)束,此時(shí)解鎖之前被鎖定的內(nèi)存空間,若:
1)此次磁盤寫操作過程中內(nèi)存中被寫入的數(shù)據(jù)量大于等于x*y,則再次觸發(fā)磁盤寫操作,將內(nèi)存中的數(shù)據(jù)全部存入磁盤。
2)此次磁盤寫操作過程中內(nèi)存中被寫入的數(shù)據(jù)量小于x*y,則在被解鎖的內(nèi)存空間中繼續(xù)寫入數(shù)據(jù),直到內(nèi)存中的數(shù)據(jù)量達(dá)到閾值x*y時(shí),再次觸發(fā)磁盤寫操作。
如此交替執(zhí)行內(nèi)存寫操作和磁盤寫操作直至所有數(shù)據(jù)被寫入磁盤。在式(2)中,y>0.5時(shí)對(duì)應(yīng)上述情況1),y≤0.5時(shí)對(duì)應(yīng)上述情況2)。
對(duì)于reduce task中的shuffle phase,有四個(gè)主要影響性能的參數(shù):reduce.java.opts、shuffle.input.buffer.percent、shuffle.merge.percent和io.sort.factor。其中reduce.java.opts和shuffle.input.buffer.percent決定了sm_mic_op內(nèi)存寫入時(shí)的空間大小。參數(shù)shuffle.merge.percent決定了觸發(fā)sd_mic_op磁盤寫入時(shí)內(nèi)存中存在數(shù)據(jù)的閾值,參數(shù)io.sort.factor決定了觸發(fā)merge_mic_op文件合并時(shí)本地存在的文件個(gè)數(shù),例如當(dāng)io.sort.factor=n時(shí),當(dāng)本地存在的文件個(gè)數(shù)為2*n-1個(gè)時(shí),觸發(fā)merge_mic_op操作,合并大小最小的n個(gè)文件為一個(gè)文件。
對(duì)于shuffle phase運(yùn)行過程的重構(gòu),首先sm_mic_op從起始位置開始查找內(nèi)存中空余空間,往未被鎖定的內(nèi)存空間中寫入數(shù)據(jù),當(dāng)?shù)谝淮蝺?nèi)存寫達(dá)到閾值時(shí)觸發(fā)磁盤寫操作并將該部分內(nèi)存空間鎖定,直到本次磁盤寫操作結(jié)束時(shí)對(duì)其解鎖;與此觸發(fā)磁盤寫操作的同時(shí),內(nèi)存寫操作繼續(xù)在剩余空閑且未被鎖定的空間內(nèi)寫入數(shù)據(jù),達(dá)到閾值時(shí)再次觸發(fā)磁盤寫操作,如此往復(fù),當(dāng)本地文件個(gè)數(shù)達(dá)到觸發(fā)merge_mic_op的閾值時(shí),觸發(fā)文件合并操作;當(dāng)sm_mic_op查找到內(nèi)存空間尾部位置時(shí),開始等待,停止寫入數(shù)據(jù)直到所有磁盤寫操作結(jié)束即內(nèi)存中所有空間被解鎖時(shí),再次從內(nèi)存起始位置開始查找空余空間寫入數(shù)據(jù);當(dāng)sm_mic_op處理過的數(shù)據(jù)量達(dá)到reduce task所需處理的數(shù)據(jù)總量時(shí),重構(gòu)過程完成。
基于微操作模型,可以在不同參數(shù)值的情況下對(duì)shuffle phase進(jìn)行作業(yè)重構(gòu),得出參數(shù)和階段執(zhí)行時(shí)間的關(guān)系。
在reduce task中還有一個(gè)階段是sort_write phase(sw_phase),該階段利用多路歸并算法將所有數(shù)據(jù)進(jìn)行排序并輸出到磁盤得到最終結(jié)果。該階段的特殊性在于雖然沒有直接影響該階段性能的參數(shù),但是在shuffle phase中產(chǎn)生的本地文件個(gè)數(shù)會(huì)間接影響該階段的數(shù)據(jù)排序效率。為了提高整個(gè)job執(zhí)行時(shí)間優(yōu)化的準(zhǔn)確性,需要對(duì)該階段進(jìn)行建模。將sort_write phase整個(gè)階段定義為一個(gè)磁盤寫微操作,影響該操作的參數(shù)是決定shuffle phase本地文件個(gè)數(shù)的參數(shù)和總數(shù)據(jù)量,所以在第2章的基準(zhǔn)測試中,測試shuffle phase相關(guān)微操作的同時(shí),在系統(tǒng)日志中提取出sort_write phase執(zhí)行時(shí)間與shuffle phase的本地文件個(gè)數(shù)和數(shù)據(jù)量的關(guān)系。定義如下微操作模型:
(3)
其中:Tsw_phase表示sort_write phase的執(zhí)行時(shí)間;Dsw_input表示sort_write phase處理的數(shù)據(jù)量大小;Nspill表示shuffle phase中sd_mic_op執(zhí)行的次數(shù); αsw_phase和βsw_phase表示模型參數(shù),通過基準(zhǔn)測試擬合可以得到模型參數(shù)。
3.2 基于微操作的參數(shù)調(diào)優(yōu)
針對(duì)本文的Hadoop參數(shù)調(diào)優(yōu)問題,優(yōu)化目標(biāo)是最小化mapreduce job的運(yùn)行時(shí)間,將job解構(gòu)為六個(gè)phase之后,優(yōu)化目標(biāo)從最小化job整體運(yùn)行時(shí)間轉(zhuǎn)換為最小化collection phase、shuffle phase和sort_write phase運(yùn)行時(shí)間之和?;谖⒉僮髂P蛯?duì)各階段運(yùn)行時(shí)間進(jìn)行最小化即可得到最小化的job運(yùn)行時(shí)間。
本文方法可視為一種優(yōu)化問題的描述方法和分析框架,在此模型基礎(chǔ)上可以應(yīng)用不同的參數(shù)搜索算法來優(yōu)化作業(yè)運(yùn)行時(shí)間。下面給出基于微操作模型的調(diào)優(yōu)框架:
1)解構(gòu)運(yùn)行過程,分析參數(shù)影響方式,定義微操作類型。
2)基于定義的微操作進(jìn)行基準(zhǔn)測試,建立微操作執(zhí)行時(shí)間和參數(shù)的關(guān)系。
3)基于微操作對(duì)運(yùn)行過程進(jìn)行重構(gòu),建立整體運(yùn)行時(shí)間與參數(shù)的關(guān)系。
4)選擇搜索算法在參數(shù)空間內(nèi)進(jìn)行搜索,迭代執(zhí)行模型,得到在不同參數(shù)值情況下運(yùn)行時(shí)間的情況選擇運(yùn)行時(shí)間達(dá)到要求的參數(shù)組合。
5)結(jié)束參數(shù)優(yōu)化。
4 實(shí)驗(yàn)結(jié)果與分析
使用本文提出的方法構(gòu)建了微操作模型和運(yùn)行過程重構(gòu)模型進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)環(huán)境配置為:型號(hào)為DELL PowerEdge R710的服務(wù)器6臺(tái),磁盤500GB/臺(tái),內(nèi)存8GB/臺(tái),默認(rèn)設(shè)置一個(gè)nodemanager上并行4個(gè)map task,并行2個(gè)reduce task。用terasort和wordcount兩種作業(yè)測試了本文的方法。
4.1 度量標(biāo)準(zhǔn)
在實(shí)驗(yàn)結(jié)果中主要對(duì)作業(yè)默認(rèn)配置的運(yùn)行時(shí)間和調(diào)優(yōu)后的運(yùn)行時(shí)間進(jìn)行對(duì)比,并對(duì)默認(rèn)配置的運(yùn)行時(shí)間歸一化為1,調(diào)優(yōu)后執(zhí)行時(shí)間為與默認(rèn)配置下執(zhí)行時(shí)間的比率。
作業(yè)默認(rèn)參數(shù)值如表2所示,在參數(shù)名后標(biāo)記序號(hào)是為在后續(xù)參數(shù)表中表示對(duì)應(yīng)參數(shù)名,不再寫具體參數(shù)名。
4.2 數(shù)據(jù)集
實(shí)驗(yàn)在terasort和wordcount 2個(gè)作業(yè)類型上測試本文提出的方法,terasort和wordcount是常用的benchmark。針對(duì)collection phase分別測試50GB、100GB和200GB的輸入數(shù)據(jù)量;針對(duì)shuffle phase分別測試100GB、200GB和300GB的輸入數(shù)據(jù)量。針對(duì)job的運(yùn)行時(shí)間分別測試100GB和200GB的輸入數(shù)據(jù)量。
4.3 結(jié)果分析
如圖2的實(shí)驗(yàn)結(jié)果所示,第一個(gè)實(shí)驗(yàn)是對(duì)terasort任務(wù)中的sd_mic_op微操作(tr_sd_mic_op)進(jìn)行擬合建模,可以得到該微操作執(zhí)行速率和數(shù)據(jù)量的關(guān)系。從圖2可以看出,線性擬合程度很高,個(gè)別離群點(diǎn)是由集群的不穩(wěn)定帶來的系統(tǒng)隨機(jī)誤差。
第二個(gè)實(shí)驗(yàn)是在terasort任務(wù)和wordcount任務(wù)上對(duì)collection phase的優(yōu)化效果進(jìn)行對(duì)比,結(jié)果如表3所示。在terasort任務(wù)中,單map task處理的數(shù)據(jù)量大小是1GB,平均運(yùn)行時(shí)間相對(duì)于默認(rèn)參數(shù)可以優(yōu)化43%左右;wordcount任務(wù)中,單map task處理的數(shù)據(jù)量大小也是1GB,平均運(yùn)行時(shí)間相對(duì)于默認(rèn)參數(shù)情況下可以優(yōu)化33%左右。參數(shù)調(diào)優(yōu)后的值如表4所示,因?yàn)樵撾A段只涉及三個(gè)參數(shù),所以其余參數(shù)為默認(rèn)值。terasort任務(wù)是一個(gè)排序任務(wù),處理過程中數(shù)據(jù)量不會(huì)有太大的變化,而wordcount任務(wù)處理過程中數(shù)據(jù)量會(huì)減少,這是導(dǎo)致優(yōu)化程度不一樣的主要原因。
第三個(gè)實(shí)驗(yàn)是在terasort和wordcount任務(wù)上對(duì)shuffle phase的優(yōu)化效果進(jìn)行對(duì)比,結(jié)果如表5所示。相對(duì)于默認(rèn)參數(shù)情況下,terasort的shuffle phase運(yùn)行時(shí)間平均優(yōu)化了45%左右,wordcount的shuffle phase運(yùn)行時(shí)間平均優(yōu)化了30%左右。shuffle phase參數(shù)調(diào)優(yōu)后的值如表6所示,因?yàn)樵撾A段只設(shè)計(jì)四個(gè)參數(shù),所以其余參數(shù)為默認(rèn)值。究其原因與collection phase分析的原因類似,不同任務(wù)數(shù)據(jù)變化方式也不一樣,調(diào)優(yōu)效果也不一樣。
5 結(jié)語
本文針對(duì)基于手動(dòng)或者經(jīng)驗(yàn)的Hadoop參數(shù)調(diào)優(yōu)存在的問題,提出了一種基于微操作重構(gòu)的Hadoop參數(shù)自動(dòng)優(yōu)化的方法。該方法通過將整體運(yùn)行過程進(jìn)行解構(gòu),定義參數(shù)直接影響的微操作模型,可以對(duì)參數(shù)的變化進(jìn)行定量的分析,再基于微操作對(duì)運(yùn)行過程進(jìn)行重構(gòu),從而建立整體運(yùn)行時(shí)間和參數(shù)的關(guān)系。實(shí)驗(yàn)結(jié)果表明,本文提出的方法在調(diào)節(jié)那些人工調(diào)優(yōu)很有難度的參數(shù)上有較好的效果,表明了本文所提的方法是可行且高效的。接下來,我們會(huì)針對(duì)其他更復(fù)雜的參數(shù),如單機(jī)并行的map task和reduce task個(gè)數(shù)等進(jìn)行調(diào)優(yōu),這會(huì)涉及到運(yùn)行流程和硬件設(shè)備的相關(guān)分析,將是未來進(jìn)一步的研究方向。
參考文獻(xiàn) (References)
[1] DEAN J, GHEMAWAT S. MapReduce: simplified data processing on large clusters [C] // Proceedings of the 6th Conference on Symposium on Opearting Systems Design and Implementation. Berkeley, CA: USENIX Association, 2004: 137-149.
[2] CUTTING D. Apache Hadoop [EB/OL]. (2015-02-25)[2018-08-12]. http://hadoop.apache.org.
[3] BABU S. Towards automatic optimization of MapReduce programs [C]// Proceedings of the 1st ACM Symposium on Cloud Computing. New York: ACM, 2010: 137-142.
[4] TIPCON T. 7 tips for improving MapReduce performance [EB/OL]. (2009-12-17)[2018-08-12]. http://www.cloudera.com/blog/2009/12/7-tips-for-improving-mapreduce-performance/.
[5] HERODOTOU H, LIM H, LUO G, et al. Starfish: a self-tuning system for big data analytics [C]// Proceedings of the 2011 5th Biennial Conference on Innovative Data Systems Research. Asilomar, CA: [s.n.], 2011: 261-272.
[6] WANG J H, QIU M K, GUO B, et al. Phase-reconfigurable shuffle optimization for Hadoop MapReduce [EB/OL]. [2018-08-12]. IEEE Transactions on Cloud Computing, 2015, 3: 1-1.https://www.onacademic.com/detail/journal_1000038191224210_fd14.html.
[7] YIGITBASI N, WILLKE T L, LIAO G, et al. Towards machine learning-based auto-tuning of MapReduce [C]// Proceedings of the IEEE 21st International Symposium on Modeling, Analysis and Simulation of Computer and Telecommunication Systems. Piscataway, NJ: IEEE, 2013: 11-20.
[8] CHAUDHURI S, NARASAYYA V. Self-tuning database systems: a decade of progress [C]// Proceedings of the 2007 International Conference on Very Large Data Bases. Framingham, MA: VLDB Endowment, 2007: 3-14.
[9] IPEK E, de SUPINSKI B R, SCHULZ M, et al. An approach to performance prediction for parallel applications [C]// Proceedings of the 2005 European Conference on Parallel Processing, LNCS 3648. Berlin: Springer, 2005: 196-205.
[10] SINGER J, KOVOOR G, BROWN G, et al. Garbage collection auto-tuning for Java MapReduce on multi-cores [C]// Proceedings of the 2011 International Symposium on Memory Management. New York: ACM, 2011: 109-118.
[11] CHENG D Z, RAO J, GUO Y F, et al. Improving performance of heterogeneous MapReduce clusters with adaptive task tuning [J]. IEEE Transactions on Parallel & Distributed Systems, 2017, 28(3): 774-786.
[12] WASI-UR-RAHMAN M, ISLAM N S, LU X, et al. MR-Advisor: a comprehensive tuning tool for advising HPC users to accelerate MapReduce applications on supercomputers [C]// Proceedings of the 28th International Symposium on Computer Architecture and High Performance Computing. Piscataway, NJ: IEEE, 2016: 198-205.
[13] 童穎.基于機(jī)器學(xué)習(xí)的Hadoop參數(shù)調(diào)優(yōu)方法[D].武漢:華中科技大學(xué),2016:1-52.(TONG Y. Hadoop parameters tuning method based on machine learning [D]. Wuhan: Huazhong University of Science and Technology, 2016: 1-52.)
[14] LIAO G, DATTA K, WILLKE T L. Gunther: search-based auto-tuning of MapReduce [C]// Proceedings of the 2013 European Conference on Parallel Processing, LNCS 8097. Berlin: Springer, 2013: 406-419.
[15] DEB K. An introduction to genetic algorithms [J]. Sadhana, 1999, 24(4/5): 293-315.
[16] 祝春祥,陳世平,陳敏剛.基于遞歸隨機(jī)抽樣的Hadoop配置優(yōu)化[J].計(jì)算機(jī)工程,2016,42(2):26-32.(ZHU C X, CHEN S P, CHEN M G. Configuration optimization of Hadoop based on recursive random sampling [J]. Computer Engineering, 2016, 42(2): 26-32.)