張 威
(湖北中醫(yī)藥大學(xué),湖北 武漢 430065)
現(xiàn)階段,移動互聯(lián)網(wǎng)服務(wù)、電子商務(wù)、感知網(wǎng)絡(luò)等技術(shù)廣泛地應(yīng)用于人們的日常生活,大量的應(yīng)用系統(tǒng)的業(yè)務(wù)以及運(yùn)行過程都產(chǎn)生了海量的數(shù)據(jù)。國際數(shù)據(jù)中心相關(guān)報告指出,當(dāng)前人們已經(jīng)處于大數(shù)據(jù)時代。隨著大數(shù)據(jù)技術(shù)需求的增加,很多大數(shù)據(jù)分布式框架產(chǎn)生,其中Apache Spark因其出色的性能和豐富的應(yīng)用支持成為當(dāng)下最流行的大數(shù)據(jù)分布式計算框架。
隨著Spark的應(yīng)用越來越廣泛,一些Spark應(yīng)用的問題也暴露了出來。其中最為重要的一個問題就是Spark的性能優(yōu)化問題。由于Spark在運(yùn)行過程中很容易受到不同因素的影響,很難發(fā)現(xiàn)其理論的最佳性能,因此,如何優(yōu)化配置提升Spark的性能,成為一個熱門的研究問題。
配置分為功能性配置和非功能配置兩種。其中,非功能性配置中有相當(dāng)數(shù)量的配置參數(shù)對Spark的性能有著非常大的影響。Apache Spark官網(wǎng)提供了很多默認(rèn)配置。這些配置在大多數(shù)情況下可以得到相對良好且正確的性能表現(xiàn)。但是,GOUNARIS A[1]和PANAGIOTIS P等人[2]提出,有一些參數(shù)會根據(jù)實驗數(shù)據(jù)規(guī)模的大小和應(yīng)用程序的差異對性能產(chǎn)生影響。BEI Z D等[3]人主要研究了參數(shù)配置對Spark工作負(fù)載的影響,研究表明,通過改變默認(rèn)參數(shù)配置,Spark性能的變化可能高達(dá)20.7倍[4]。這個數(shù)據(jù)也說明參數(shù)對于性能優(yōu)化有著舉足輕重的作用。
Spark平臺有多種優(yōu)化方式,其中,通過調(diào)整Spark的配置參數(shù)值獲得最優(yōu)執(zhí)行時間的方式最為簡便有效。通過大量的日常工作實踐能夠發(fā)現(xiàn),Spark平臺的執(zhí)行時間除受到配置參數(shù)影響之外,還與平臺執(zhí)行的應(yīng)用類型以及處理的數(shù)據(jù)規(guī)模有關(guān)。其中,應(yīng)用類型是按照在Spark平臺執(zhí)行應(yīng)用程序?qū)τ谄脚_的系統(tǒng)和硬件資源依賴進(jìn)行分類。
通過實驗觀察發(fā)現(xiàn),Spark集群在運(yùn)行過程中會受到運(yùn)行環(huán)境動態(tài)變化的影響而產(chǎn)生執(zhí)行時間的波動。這種波動在某些特殊情況下產(chǎn)生較大的異常波動,但是經(jīng)過統(tǒng)計,大量的樣本都會集中在“合理”的運(yùn)行時間周圍,個別樣本會產(chǎn)生離群現(xiàn)象?;诿芏鹊姆绞娇赡軐⑿∫?guī)模樣本誤判為異常,因此采用基于近鄰的模型構(gòu)建方法一方面可以保證近鄰樣本能夠為鄰域的異常樣本判定提供信息,同時也能夠識別小規(guī)模樣本,也保證這些數(shù)據(jù)不會被作為異常數(shù)據(jù)處理。因此,首先通過K最鄰近(K-NearestNeighbor,KNN)分類算法計算出每一個樣本的5個鄰居,近鄰樣本用于訓(xùn)練循環(huán)神經(jīng)網(wǎng)絡(luò)(Rerrent Neural Network,RNN)構(gòu)建當(dāng)前樣本的近鄰模型,近鄰模型的信息與該樣本通過一同訓(xùn)練全連接網(wǎng)絡(luò)。最終通過粒子群(Particle Swarm Optimization,PSO)算法搜索模型的配置定義域,從而獲得最佳配置,獲得任務(wù)的最佳模型。整體方案如圖1所示。
圖1 基于近鄰的Spark參數(shù)優(yōu)化方案
為了獲取全面且準(zhǔn)確的工作負(fù)載,本文采用Hibench軟件生成工作負(fù)載。Hibench內(nèi)部集成了6大類、29種工作負(fù)載。為了能夠獲取充足的Spark平臺的配置性能樣本,本文通過不同的Hibench配置,將各類標(biāo)準(zhǔn)負(fù)載存儲于Hadoop分布式文件系統(tǒng)(HDFS)上。接下來用改進(jìn)的正交設(shè)計方法構(gòu)建的出10因素10水平的正交實驗方案。
所謂10因素10水平正交實驗,不是用一個正交實驗設(shè)計一次完成10水平實驗,而是利用10因素3水平實驗方法完成一輪實驗,接下來,對正交結(jié)果進(jìn)行分析。正交分析傾向?qū)嶒灲Y(jié)果極差大的情況,所以算法會保留實驗結(jié)果中的極大值和極小值做下一輪實驗,被去掉的中間值樣本會由沒有試驗過新的水平替換,迭代前面的過程直到所有的水平都按照正交組合的方式進(jìn)行了實驗。
因為在Spark的配置參數(shù)樣本是含有單位字符串類型的數(shù)據(jù),所以數(shù)據(jù)收集模塊獲取數(shù)據(jù)后首先去掉參數(shù)上的單位,進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。所有的數(shù)據(jù)中包含值域為True或者False的布爾類以及數(shù)值型兩類參數(shù)。為了便于后面構(gòu)建配置性能模型,需要將布爾型參數(shù)轉(zhuǎn)換為1和0。
此歸一化結(jié)果將通過KNN算法計算樣本集合的5個近鄰。近鄰計算結(jié)果分別用來訓(xùn)練RNN[5]和全連接網(wǎng)絡(luò)。首先用近鄰數(shù)據(jù)對RNN進(jìn)行訓(xùn)練,RNN模型可以有效描述樣本點的緊鄰信息。其次,RNN輸出結(jié)果與當(dāng)前樣本信息共同對全連接網(wǎng)絡(luò)進(jìn)行訓(xùn)練。如果只是使用全連接網(wǎng)絡(luò)構(gòu)建模型,模型容易受到異常樣本的影響,而RNN模型中含有的近鄰信息能夠有效降低異常樣本對于預(yù)測結(jié)果的影響。最后,通過PSO粒子群算法搜索樣本空間求解預(yù)測模型的最小值。這個最小值就是Spark執(zhí)行類似類型應(yīng)用的最短時間,而對應(yīng)的配置樣本就是優(yōu)化Spark的配置。
即使在相同的樣本條件下,Spark應(yīng)用的執(zhí)行時間仍然有一定的波動性。利用算法對近鄰樣本提取上下文信息,能夠提升模型的質(zhì)量。近鄰算法易于實現(xiàn),不易受到低概率異常數(shù)據(jù)影響。本文設(shè)計的混合網(wǎng)絡(luò)模型對近鄰算法進(jìn)行了改進(jìn)。這種改進(jìn)將克服數(shù)據(jù)對于模型的負(fù)面影響,同時利用近鄰算法的優(yōu)勢降低異常數(shù)據(jù)對模型訓(xùn)練產(chǎn)生的干擾。網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 基于RNN的近鄰混合網(wǎng)絡(luò)結(jié)構(gòu)
由圖2可見,算法由三個部分構(gòu)成。第一部分是計算含有n個樣本的模型訓(xùn)練集Xtrain={x(i)},1≤i≤n中每一個樣本的5個近鄰,并將近鄰按照距離由遠(yuǎn)及近的規(guī)則構(gòu)建序列其中1≤t≤5表示x(i)樣本的近鄰元素。第二部分,利用近鄰構(gòu)建的序列對循環(huán)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,應(yīng)用LeakyRelu激勵函數(shù)處理數(shù)據(jù)。此部分的更新方程如式(1)所示。
式中:W和U表示連同權(quán)重矩陣,b表示偏置向量,z(t)表示當(dāng)前樣本的第t個近鄰。h(t)輸出值作為第三部分3層全連接網(wǎng)絡(luò)的輸入,最終計算獲得回歸結(jié)果。
實驗平臺構(gòu)建在基于Intel(R)Xeon(R) CPU E5-2699的物理服務(wù)器集群上。在集群上創(chuàng)建8個虛擬機(jī)服務(wù)器,每個虛擬機(jī)服務(wù)器擁有16核CPU、16 GB內(nèi)存以及256 GB的存儲空間。
實驗方案如表1所示。
表1 實驗方案
Hibench軟件提出的Wordcount負(fù)載負(fù)責(zé)計算輸入數(shù)據(jù)中單個單詞出現(xiàn)的頻次,代表了一種比較典型的MapReduce作業(yè)。Hibench中的micro Benchmarks的sort負(fù)載是對文本輸入數(shù)據(jù)進(jìn)行排序,數(shù)據(jù)是由RandomTextWriter生成的。Hibench提出的PageRank負(fù)載中,數(shù)據(jù)源主要通過Web數(shù)據(jù)獲得,提供了包含數(shù)據(jù)和需要大量迭代計算的搜索引擎,又提供了用來測試大規(guī)模搜索子系統(tǒng)的Nutchindexing,所以這種負(fù)載屬于混合型負(fù)載。
利用本文模型建模后,利用PSO算法對模型配置空間進(jìn)行搜索,將獲得的最優(yōu)配置作為Spark的配置參數(shù),執(zhí)行所需時間與Spark默認(rèn)參數(shù)配置的執(zhí)行時間進(jìn)行對比,如圖3所示。
圖3 優(yōu)化配置與默認(rèn)配置性能對比
在Wordcount負(fù)載中,優(yōu)化算法用時29.7 min,性能提升了約10.5%;在Sort負(fù)載中,優(yōu)化算法用時29.08 min,執(zhí)行效率提升了約4.6%;在混合型PageRank負(fù)載中,優(yōu)化算法用時45.45 min,運(yùn)行效率提升了約30%。
本文利用RNN網(wǎng)絡(luò)對Spark樣本進(jìn)行性能建模,并采用粒子群算法獲取最佳配置,以此優(yōu)化Spark的執(zhí)行效率。RNN對近鄰樣本的分析,有效地降低了異常樣本對于模型的影響,提升了算法的魯棒性。然而,對于近鄰的分析,增加了模型構(gòu)建過程的算法開銷。在后面的工作中,將對此進(jìn)行改進(jìn)。