原創(chuàng)|行業(yè)資訊|編輯:陳俊吉|2016-07-19 09:49:05.000|閱讀 3427 次
概述:SparkBench的測試項(xiàng)目覆蓋了Spark支持的四種最主流的應(yīng)用類型,即機(jī)器學(xué)習(xí)、圖計(jì)算、SQL查詢和流數(shù)據(jù)計(jì)算。每種類型的應(yīng)用又選擇了最常用的幾個(gè)算法或者應(yīng)用進(jìn)行比對(duì)測試,測試結(jié)果從系統(tǒng)資源消耗、時(shí)間消耗、數(shù)據(jù)流特點(diǎn)等各方面全面考察,總體而言是比較全面的測試。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
SparkBench是的基準(zhǔn)性能測試項(xiàng)目,由來自IBM Watson研究中心的五位研究者(Min Li, Jian Tan, Yandong Wang, Li Zhang, Valentina Salapura)發(fā)起,并貢獻(xiàn)至開源社區(qū)。
SparkBench的測試項(xiàng)目覆蓋了Spark支持的四種最主流的應(yīng)用類型,即機(jī)器學(xué)習(xí)、圖計(jì)算、SQL查詢和流數(shù)據(jù)計(jì)算。每種類型的應(yīng)用又選擇了最常用的幾個(gè)算法或者應(yīng)用進(jìn)行比對(duì)測試,測試結(jié)果從系統(tǒng)資源消耗、時(shí)間消耗、數(shù)據(jù)流特點(diǎn)等各方面全面考察,總體而言是比較全面的測試。
所有的研究結(jié)果以論文的形式公開發(fā)布,原文可在SparkBench的官方網(wǎng)站下載,測試相關(guān)的數(shù)據(jù)和代碼也可下載供測試使用,本文將主要的研究結(jié)果呈現(xiàn)給大家。
SparkBench最主要的目的是通過基準(zhǔn)性能測試,研究與傳統(tǒng)計(jì)算平臺(tái)的不同之處,為搭建Spark平臺(tái)提供參考和通用指導(dǎo)原則。具體而言SparkBench可以在如下場景中發(fā)揮作用:
1、重點(diǎn)領(lǐng)域需要有參考數(shù)據(jù)和定量分析結(jié)果,包括:Spark緩存設(shè)置、內(nèi)存管理優(yōu)化、調(diào)度策略;
2、需要不同硬件、不同平臺(tái)中運(yùn)行Spark的性能參照數(shù)據(jù);
3、尋找集群規(guī)劃指導(dǎo)原則,幫助定位資源配置中的瓶頸,通過合理的配置使資源競爭最小化;
4、需要從多個(gè)角度深入分析Spark平臺(tái),包括:負(fù)載類型、關(guān)鍵配置參數(shù)、擴(kuò)展性和容錯(cuò)性等
SparkBench測試項(xiàng)目
SparkBench主要的的測試項(xiàng)目,按負(fù)載類型劃分如下表所示:
其中機(jī)器學(xué)習(xí)類型選擇了最常用的邏輯回歸、支持向量機(jī)和矩陣分解算法,這些是在進(jìn)行數(shù)據(jù)歸類或者構(gòu)建推薦系統(tǒng)時(shí)最常用的機(jī)器學(xué)習(xí)算法,很有代表性。圖計(jì)算類別中選取了最流行的三種圖計(jì)算算法:PangeRank、SVD++和TriangleCount,各具特點(diǎn)。SQL查詢類別同時(shí)測試了Hive on Spark和原生態(tài)的Spark SQL,測試覆蓋最常用的三種SQL操作:select、aggregate和 join。流計(jì)算類別分別測試了Twitter數(shù)據(jù)接口Twitter4j的流數(shù)據(jù)和模擬用戶訪問網(wǎng)頁的流數(shù)據(jù)(PageView)。
除了表中列出的測試項(xiàng)目,目前最新版本的SparkBench還包括很多其他負(fù)載類型的測試項(xiàng)目:KMeans,LinearRegression,DecisionTree,ShortestPaths, LabelPropagation, ConnectedComponent, StronglyConnectedComponent,PregelOperatio。
SparkBench的測試數(shù)據(jù)
SparkBench大部分測試數(shù)據(jù)由項(xiàng)目自帶的數(shù)據(jù)生成器生成,其中SQL查詢使用模擬生成的電子商務(wù)系統(tǒng)的訂單數(shù)據(jù),流計(jì)算使用的分別是Twitter數(shù)據(jù)(Twitter4j每60秒發(fā)布一次最熱門的標(biāo)簽數(shù)據(jù))和模擬生成的用戶活動(dòng)數(shù)據(jù)(用戶點(diǎn)擊、頁面訪問統(tǒng)計(jì)等等)。具體測試項(xiàng)目的數(shù)據(jù)量如下表所示:
SparkBench的研究方法
SparkBench基準(zhǔn)測試通過每個(gè)測試項(xiàng)目指標(biāo)的縱向?qū)Ρ龋投鄠€(gè)測試項(xiàng)目指標(biāo)的橫向?qū)Ρ龋瑏戆l(fā)現(xiàn)不同工作負(fù)載的規(guī)律,目前版本研究的主要指標(biāo)是:任務(wù)執(zhí)行時(shí)間、數(shù)據(jù)處理速度和對(duì)資源的消耗情況。在未來的版本中會(huì)陸續(xù)加入其它方面的指標(biāo)進(jìn)行研究,包括shuffle數(shù)據(jù)量, 輸入輸出數(shù)據(jù)量等。
SparkBench測試環(huán)境
公開發(fā)布的結(jié)果是基于IBM SoftLayer云計(jì)算平臺(tái)的測試環(huán)境:總共11臺(tái)虛擬主機(jī),每臺(tái)配置4核CPU,8GB的內(nèi)存和2塊100GB的虛擬硬盤(一塊盤分配給HDFS,另一塊做為Spark本地緩存使用),網(wǎng)絡(luò)帶寬1Gbps。11臺(tái)虛擬主機(jī)中,只有1臺(tái)作為管理節(jié)點(diǎn),剩下的10臺(tái)作為HDFS數(shù)據(jù)節(jié)點(diǎn)和Spark計(jì)算節(jié)點(diǎn),每個(gè)Spark計(jì)算節(jié)點(diǎn)只設(shè)置1個(gè)executor并分配了6GB的最大內(nèi)存。
可能會(huì)有人擔(dān)心虛擬機(jī)測試結(jié)果會(huì)與物理環(huán)境測試結(jié)果相差過大,對(duì)于這一點(diǎn)論文指出,經(jīng)過實(shí)際測試,在該虛擬環(huán)境中的測試結(jié)果與同等配置硬件環(huán)境的測試結(jié)果相比,相差不超過5%。
背景交代完畢,下面是最重要的內(nèi)容:SparkBench測試結(jié)果及分析!
SparkBenc測結(jié)果和分析
任務(wù)運(yùn)行時(shí)間對(duì)比
MapReduce作業(yè)分為Map和Reduce兩個(gè)階段,類似的作業(yè)也可分為兩部分:ShuffleMapTask和ResultTask。前者由Spark DAG生成,會(huì)在不同節(jié)點(diǎn)間分發(fā)數(shù)據(jù),產(chǎn)生一系列高代價(jià)的操作:IO、數(shù)據(jù)序列化、反序列化等。按這兩個(gè)階段(分別顯示為Shuffle Time和Regular Time)統(tǒng)計(jì)的運(yùn)行時(shí)間占比如下:
測試結(jié)果顯示,除了邏輯回歸測試項(xiàng)目中ShuffleMapTasks階段運(yùn)行時(shí)間占比小于一半,其他測試項(xiàng)目都超了過50%,其中HIVE SQL/Spark SQL和矩陣分解算法等這幾個(gè)測試的ShuffleMapTasks時(shí)間占比接近100%! 論文中論述的原因是:SQL查詢及矩陣分解算法都使用了大量的聚合和數(shù)據(jù)關(guān)聯(lián)操作(RDD或表),比如矩陣分解算法中GroupBy操作就占用了約98%的時(shí)間,這樣的操作會(huì)使Spark花費(fèi)大量時(shí)間在不同Stage之間的協(xié)同和數(shù)據(jù)分發(fā)上。
測試項(xiàng)目的資源占比分析
我們摘選幾個(gè)關(guān)鍵測試項(xiàng)目的測試結(jié)果呈現(xiàn)如下:
邏輯回歸測試:對(duì)CPU和內(nèi)存的占用較為平均,分別為63%和5.2GB;對(duì)磁盤IO的占用峰值出現(xiàn)在測試開始階段,后繼占用逐漸減少。
SVM測試項(xiàng)目:對(duì)CPU和IO的占用具有雙峰的特點(diǎn),分別在測試開始不久和測試結(jié)束前占用較多CPU和IO資源。
矩陣分解測試: 占用較高CPU和內(nèi)存,對(duì)磁盤IO的占用特點(diǎn)是有大量的本地盤操作而不是HDFS操作,這是因?yàn)樵摴ぷ髫?fù)載產(chǎn)生大量的Shuffle數(shù)據(jù),Shuffle是由本地盤的IO來完成的。
SQL查詢測試項(xiàng)目:HIVE SQL和Spark Native SQL對(duì)資源的占用規(guī)律類似,都占用了將近100%的資源! 這與SQL計(jì)算中有大量的數(shù)據(jù)表關(guān)聯(lián)有關(guān)。
流計(jì)算測試項(xiàng)目:兩個(gè)流計(jì)算測試項(xiàng)目的資源占用規(guī)律類似。與其他負(fù)載類型相比,除了內(nèi)存占用逐漸變大,對(duì)其他資源(CPU/IO/網(wǎng)絡(luò))的占用率較低。
通過對(duì)四種工作負(fù)載、多個(gè)測試項(xiàng)目的結(jié)果分析,得到如下結(jié)論:
1. 內(nèi)存資源對(duì)尤為重要,因?yàn)樗蓄愋偷呢?fù)載都需要在內(nèi)存中保存大量RDD數(shù)據(jù),因此系統(tǒng)配置時(shí)需要優(yōu)先配置內(nèi)存;
2. 進(jìn)行優(yōu)化時(shí),Shuffle的優(yōu)化異常重要,大部分負(fù)載超過50%的執(zhí)行時(shí)間都用在Shuffle上。
有趣!只增加CPU可能會(huì)降低性能
SparkBench測試還研究了增加CPU資源對(duì)負(fù)載性能的影響。測試中選用三種典型的負(fù)載(邏輯回歸、PangeRank和Hive SQL),來研究線性增加CPU個(gè)數(shù)對(duì)任務(wù)執(zhí)行時(shí)間的影響。
由于中默認(rèn)一個(gè)CPU Core分配一個(gè)Executor,只要系統(tǒng)CPU資源足夠多,Spark會(huì)啟動(dòng)多個(gè)并行任務(wù)(Executor),因此增加CPU個(gè)數(shù)就是增加并發(fā)任務(wù)數(shù)量。而在現(xiàn)有環(huán)境中CPU核數(shù)從1增加到2,總體上都可以減少執(zhí)行時(shí)間,成倍增加效率;但如果過度增加CPU可能不僅沒能改善,反而會(huì)降低性能,參見HiveSQL測試結(jié)果:
詳情請(qǐng)咨詢!
客服熱線:023-66090381
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn