《企業(yè)網(wǎng)D1Net》11月4日訊
引言
大數(shù)據(jù)基礎(chǔ)技術(shù)領(lǐng)域中Hadoop的地位已獲得廣泛認(rèn)同,但目前國(guó)內(nèi)外市場(chǎng)上的Hadoop版本也是林林總總,到底該參照什么標(biāo)準(zhǔn)來(lái)考評(píng)Hadoop,尤其是給企業(yè)應(yīng)用的Hadoop發(fā)行版平臺(tái)呢?
大家可能都聽說(shuō)過(guò)TPC – Transaction Processing Performance Council,它是一個(gè)非贏利的標(biāo)準(zhǔn)化組織。它定義了多組標(biāo)準(zhǔn)測(cè)試集用于客觀地/可重現(xiàn)地評(píng)測(cè)數(shù)據(jù)庫(kù)的性能。TPC中有個(gè)Decision Support(DS)子集,即TPC-DS,是用于評(píng)測(cè)決策支持系統(tǒng)(或數(shù)據(jù)倉(cāng)庫(kù))的標(biāo)準(zhǔn)SQL測(cè)試集。這個(gè)測(cè)試集包含對(duì)大數(shù)據(jù)集的統(tǒng)計(jì)/報(bào)表生成/聯(lián)機(jī)查詢/數(shù)據(jù)挖掘等復(fù)雜應(yīng)用,測(cè)試用的數(shù)據(jù)和值是有傾斜的,與真實(shí)數(shù)據(jù)一致??梢哉f(shuō)TPC-DS是與真實(shí)場(chǎng)景非常接近的一個(gè)測(cè)試集,也是難度較大的一個(gè)測(cè)試集。
TPC-DS的這個(gè)特點(diǎn)跟大數(shù)據(jù)的分析挖掘應(yīng)用非常類似。Hadoop等大數(shù)據(jù)分析技術(shù)也是對(duì)海量數(shù)據(jù)進(jìn)行大規(guī)模的數(shù)據(jù)分析和深度挖掘,也包含交互式聯(lián)機(jī)查詢和統(tǒng)計(jì)報(bào)表類應(yīng)用,同時(shí)大數(shù)據(jù)的數(shù)據(jù)質(zhì)量也較低,數(shù)據(jù)分布是真實(shí)而不均勻的。因此TPC-DS成為客觀衡量多個(gè)不同Hadoop版本以及SQL on Hadoop技術(shù)的最佳測(cè)試集。隨著國(guó)內(nèi)外各代表性的Hadoop發(fā)行版廠商以TPC-DS為標(biāo)準(zhǔn)測(cè)評(píng)產(chǎn)品,TPC-DS也就逐漸成為了業(yè)界公認(rèn)的Hadoop系統(tǒng)測(cè)試準(zhǔn)則。這個(gè)基準(zhǔn)測(cè)試有以下幾個(gè)主要特點(diǎn):
●一共99個(gè)測(cè)試案例,遵循SQL'99和SQL 2003的語(yǔ)法標(biāo)準(zhǔn),SQL案例比較復(fù)雜
●分析的數(shù)據(jù)量大,并且測(cè)試案例是在回答真實(shí)的商業(yè)問(wèn)題
●測(cè)試案例中包含各種業(yè)務(wù)模型(如分析報(bào)告型,迭代式的聯(lián)機(jī)分析型,數(shù)據(jù)挖掘型等)
●幾乎所有的測(cè)試案例都有很高的IO負(fù)載和CPU計(jì)算需求
這個(gè)基準(zhǔn)測(cè)試的完整信息請(qǐng)參考http://www.tpc.org/tpcds/。
為了使大家進(jìn)一步了解星環(huán)Hadoop發(fā)行版的性能,我們選取了國(guó)外具代表性的廠商Cloudera及其產(chǎn)品(Cloudera Impala)做對(duì)比測(cè)試。
測(cè)試硬件環(huán)境
我們搭建了兩個(gè)集群分別用于Transwarp Inceptor與Cloudera Impala的測(cè)試。每個(gè)集群采用4臺(tái)普通兩路x86服務(wù)器搭建,每臺(tái)服務(wù)器硬件配置如下:
我們使用的操作系統(tǒng)是64位的CentOS 6.4,Linux Kernel版本號(hào)為2.6.32。Transwarp Inceptor集群部署了Transwarp Data Hub (TDH) v3.4,包括基準(zhǔn)的Hadoop 2.2以及Inceptor。系統(tǒng)配置方面,每臺(tái)服務(wù)器的6塊硬盤中有1塊用于操作系統(tǒng),其他5塊硬盤用作HDFS。Hadoop的各種服務(wù)的配置如下:
相對(duì)應(yīng)地,我們?cè)贑loudera的集群中安裝了CDH 5.1.3(包含Hadoop 2.3)以及Impala 1.4。
測(cè)試軟件設(shè)定
TPC-DS配置
考慮到磁盤的容量和HDFS的存儲(chǔ)復(fù)制模式,我們選擇的是500GB的數(shù)據(jù)總量。SQL測(cè)試案例的選擇上,在Cloudera Impala中使用的是由Cloudera改動(dòng)過(guò)的TPC-DS測(cè)試子集,在Transwarp Inceptor我們選用的是TPC-DS為MySQL生成的測(cè)試集合,保留了原有的各種復(fù)雜SQL,因此能夠客觀反映出Inceptor在SQL支持上的情況。
Cloudera Impala測(cè)試集合可參考https://github.com/cloudera/impala-tpcds-kit。
Hadoop版本
Transwarp Data Hub (TDH) v3.4使用的是Hadoop2.2 版本,而ClouderaCDH 5.1.3使用的是Hadoop 2.3。HDFS 2.3增加了一些新的功能如DataNode Cache,因此能夠更有效地減少磁盤讀寫。TDH下個(gè)版本會(huì)升級(jí)到Hadoop 2.3,屆時(shí)我們會(huì)再次測(cè)試以權(quán)衡出HDFS的版本升級(jí)帶來(lái)的性能提升情況。
TranswarpTDH和ClouderaCDH都是用YARN作為資源調(diào)度組件,版本號(hào)分別為2.2 和2.3,但是考慮到Y(jié)ARN這兩個(gè)版本間沒(méi)有大的性能相關(guān)功能,可以認(rèn)為資源調(diào)度方面沒(méi)有差異。
其他組件沒(méi)有太多的差異性,因此可以不考慮他們對(duì)最終的測(cè)試結(jié)果產(chǎn)生的影響。
數(shù)據(jù)存儲(chǔ)格式
Transwarp Inceptor可以支持基于內(nèi)存和SSD的數(shù)據(jù)表作為數(shù)據(jù)輸入,也支持ORC和Text文件格式。考慮到Cloudera Impala只支持磁盤表,為了公正測(cè)試,我們使用Inceptor的磁盤表ORC格式和Impala的Parquet 格式做數(shù)據(jù)對(duì)比。另外,我們沒(méi)有Cloudera Impala的詳細(xì)資料,因此沒(méi)有任何額外的參數(shù)設(shè)置和調(diào)優(yōu)工作,只是使用默認(rèn)的參數(shù)完成Impala的測(cè)試。
測(cè)試方法
為了保證數(shù)據(jù)的合理性,我們所有的性能測(cè)試數(shù)據(jù)都是每個(gè)測(cè)試案例完成三次運(yùn)行后取的平均值。同時(shí)為了避免系統(tǒng)內(nèi)部緩存對(duì)結(jié)果的影響,我們的測(cè)試不是連續(xù)將同一個(gè)測(cè)試SQL執(zhí)行3次,而是連續(xù)執(zhí)行完整個(gè)測(cè)試集合后再執(zhí)行下一輪的測(cè)試集合。
建表與數(shù)據(jù)分區(qū)
Transwarp Inceptor支持兩種分區(qū)方式:基于單一值的分區(qū)方式(unique value partition)和區(qū)間分區(qū)方式(range partition)。考慮到TPC-DS基準(zhǔn)測(cè)試的時(shí)間跨度包含十幾年的數(shù)據(jù),我們選擇按照日期相關(guān)的列做區(qū)間分區(qū)(range partition)。大的事實(shí)表都采用這種分區(qū)策略,包括:store_sales, store_returns, catalog_sales, catalog_returns, web_sales, web_returns, inventory。另外所有的維度表不做任何的分區(qū)設(shè)定。原始TEXT格式的數(shù)據(jù)總量為~490GB,轉(zhuǎn)成ORC格式后壓縮成~150GB。
Cloudera Impala使用修改版的測(cè)試案例,SQL集合中只包含一張事實(shí)表(store_sales)和9個(gè)維度表,生成的TEXT格式數(shù)據(jù)大小約130GB,實(shí)際導(dǎo)入的壓縮的parquet文件總數(shù)據(jù)量只有50GB。
測(cè)試結(jié)果
測(cè)試案例支持廣度
Transwarp Inceptor可以支持99個(gè)測(cè)試案例中的72個(gè)測(cè)試SQL,并且沒(méi)有SQL會(huì)出現(xiàn)運(yùn)行錯(cuò)誤。在Inceptor 4.0版本中,我們會(huì)加入更多的SQL支持,如Intersect/Except Operator,多層級(jí)的correlated subquery等,SQL的支持度將會(huì)進(jìn)一步提高。
下表是TPC-DS官方標(biāo)準(zhǔn)測(cè)試集合要求的主要SQL語(yǔ)法功能,以及Transwarp Inceptor和Cloudera Impala的支持情況:
由于Cloudera Impala的SQL語(yǔ)法支持非常有限,在Cloudera發(fā)布的測(cè)試集合中的20個(gè)SQL,只有6個(gè)是官方正式發(fā)布的版本。另外所有SQL中都只有一個(gè)事實(shí)表,沒(méi)有出現(xiàn)多個(gè)事實(shí)表的案例。在TPC-DS的標(biāo)準(zhǔn)測(cè)試集合中,一共有39個(gè)測(cè)試案例是多個(gè)事實(shí)表之間的連接,而這些案例全部不在Cloudera Impala的測(cè)試集合中。此外所有的SQL中事實(shí)表都被加上了一個(gè)partition key的過(guò)濾條件,因此Cloudera的測(cè)試有些不夠嚴(yán)謹(jǐn)。
與之相對(duì)應(yīng)的,Transwarp Inceptor原生支持窗口統(tǒng)計(jì)函數(shù)和多維度GROUP BY統(tǒng)計(jì),另外有Cost based optimizer來(lái)實(shí)時(shí)的生成過(guò)濾條件,選擇更佳的表連接順序,挑選更合適的表連接算法等,所以能夠有效的支持這些標(biāo)準(zhǔn)的SQL測(cè)試案例。
穩(wěn)定性比較
上圖是整個(gè)測(cè)試過(guò)程中出現(xiàn)的Out Of Memory次數(shù)的比較。Cloudera Impala是基于內(nèi)存的計(jì)算模式,內(nèi)部采用thrift作用通信協(xié)議,所以只要網(wǎng)絡(luò)或者內(nèi)存有波動(dòng)就比較容易出現(xiàn)錯(cuò)誤,由于沒(méi)有相應(yīng)的容錯(cuò)設(shè)計(jì),整個(gè)測(cè)試的穩(wěn)定性表現(xiàn)比較差。在測(cè)試過(guò)程中,部分SQL(如query3,19,42等)一共有10次跑出Out Of Memory的錯(cuò)誤,我們每次遇到這種問(wèn)題后都會(huì)重啟Impala來(lái)完成測(cè)試,否則會(huì)重復(fù)的遇到這個(gè)問(wèn)題。因此,Cloudera Impala的測(cè)試過(guò)程中有大量的手工動(dòng)作。
相比較而言,Transwarp Inceptor也是基于內(nèi)存的計(jì)算,但是支持?jǐn)?shù)據(jù)可動(dòng)態(tài)地從內(nèi)存換入換出到磁盤,能夠有效的容錯(cuò)等內(nèi)存使用量超大的計(jì)算場(chǎng)景,尤其是在有大量數(shù)據(jù)傾斜狀況(data skew)的場(chǎng)景。另外大量的數(shù)據(jù)shuffle都是通過(guò)HDFS完成的,因此可以確保正確性和容錯(cuò)能力。由于出色的健壯性和容錯(cuò)性,Transwarp Inceptor整個(gè)測(cè)試計(jì)劃全部是自動(dòng)完成的。
性能比較
下圖是所有的測(cè)試集合的性能對(duì)比圖。圖中縱坐標(biāo)小于1表述測(cè)試案例中Cloudera Impala
性能超過(guò)Transwarp Inceptor,而大于1則表示Transwarp Inceptor有更好的性能表現(xiàn)。對(duì)于Cloudera Impala不能支持的SQL,我們就標(biāo)記這個(gè)性能比為100。
從圖中可見,在Cloudera Impala支持的20個(gè)SQL中,有11個(gè)SQL的表現(xiàn)超過(guò)Transwarp Inceptor,2個(gè)表現(xiàn)相當(dāng),另外7個(gè)Transwarp Inceptor比Cloudera Impala表現(xiàn)的更好。
由于Cloudera Impala的測(cè)試案例中手工的給事實(shí)表添加了partition key的過(guò)濾條件,因此能夠有效過(guò)濾大量數(shù)據(jù),實(shí)際參與計(jì)算的數(shù)據(jù)量比Transwarp Inceptor要少,所以在這些相關(guān)的案例中Cloudera Impala得以表現(xiàn)良好。另外一些SQL邏輯非常簡(jiǎn)單的案例中Cloudera Impala的表現(xiàn)也比較好,這個(gè)則要?dú)w功于Cloudera Impala使用C++代碼開發(fā),相對(duì)來(lái)說(shuō)執(zhí)行效率超過(guò)Transwarp Inceptor的Java語(yǔ)言。除此之外的其他案例中,如邏輯復(fù)雜的SQL、或大量數(shù)據(jù)參與實(shí)際計(jì)算、或窗口統(tǒng)計(jì)等情況中,Transwarp Inceptor無(wú)論從穩(wěn)定性還是性能上表現(xiàn)都更為超越。
另外,在和開源的Hive執(zhí)行效率相比中,Inceptor 3.4能夠帶來(lái)10x~100x的性能提升。下圖是TPC-DS的部分query在Inceptor和CDH Hive的性能提升倍數(shù),其中最大的提升倍數(shù)竟可達(dá)到123倍。需要說(shuō)明的是,這里用的Query跟Impala運(yùn)行的相同。
更多詳細(xì)的性能比較以及TPC-DS的測(cè)試配置和細(xì)節(jié)可以參考星環(huán)發(fā)布的性能白皮書。
測(cè)試小結(jié)
通過(guò)Transwarp Inceptor和Cloudera Impala在TPC-DS案例上的對(duì)比,我們不難得到如下結(jié)論:
Transwarp Inceptor在SQL支持度上遠(yuǎn)勝于Cloudera Impala,應(yīng)用遷移成本更低。
Transwarp Inceptor在穩(wěn)定性和容錯(cuò)性上表現(xiàn)優(yōu)于Cloudera Impala,系統(tǒng)運(yùn)維成本更低。
Transwarp Inceptor在性能表現(xiàn)上和Cloudera Impala基本相當(dāng),都有各自擅長(zhǎng)的應(yīng)用場(chǎng)景。
Transwarp Inceptor和Cloudera Impala的可擴(kuò)展性方面的比較由于硬件資源的限制而沒(méi)有測(cè)試,后期我們會(huì)加上相應(yīng)的測(cè)試結(jié)果。
結(jié)語(yǔ)
雖然標(biāo)準(zhǔn)的Hadoop能夠解決用戶在數(shù)據(jù)處理上能與不能的問(wèn)題,但卻不能有效滿足用戶更深層次的需求,尤其兩個(gè)方面:一是傳統(tǒng)Hadoop使用MapReduce框架作為計(jì)算引擎,所有的數(shù)據(jù)計(jì)算以磁盤為中心,因此計(jì)算時(shí)間長(zhǎng),任務(wù)調(diào)度延時(shí)大,不適合交互式或者迭代式計(jì)算場(chǎng)景;二是Hive QL作為Hadoop的查詢語(yǔ)言,其支持的語(yǔ)法比傳統(tǒng)的SQL要小很多,因此不能滿足實(shí)際用戶的應(yīng)用要求。
星環(huán)科技的Transwarp Inceptor交互式分析引擎構(gòu)建于Hadoop之上,但使用Spark作為其默認(rèn)計(jì)算引擎。Spark采用基于內(nèi)存的計(jì)算模型和更細(xì)粒度的并發(fā)調(diào)度等技術(shù),有效解決了MapReduce的高延時(shí)問(wèn)題。在Spark基礎(chǔ)上,Transwarp Inceptor還擴(kuò)展了多種執(zhí)行引擎的優(yōu)化技術(shù),推出了基于內(nèi)存與SSD的混合存儲(chǔ)結(jié)構(gòu),有效將SQL任務(wù)執(zhí)行的時(shí)間在開源Spark的技術(shù)上再降低了數(shù)倍,因而能夠有效地應(yīng)用于交互式和迭代式計(jì)算場(chǎng)景。
Transwarp Inceptor采用自主研發(fā)的SQL編譯引擎,完善地支持SQL92、SQL'99等標(biāo)準(zhǔn),并且部分支持SQL2003以及PL/SQL,因此能夠有效滿足大部分客戶的應(yīng)用需求,避免大量的應(yīng)用重寫工作。
隨著在大數(shù)據(jù)領(lǐng)域國(guó)內(nèi)外開始處于同一起跑線,我們相信像星環(huán)科技這樣國(guó)內(nèi)具有代表性的Hadoop發(fā)行版廠商將在中國(guó)的廣闊市場(chǎng)空間中獲得長(zhǎng)足發(fā)展,并且由于中國(guó)市場(chǎng)激烈的競(jìng)爭(zhēng)與磨練,逐步打磨出超越國(guó)外先進(jìn)廠商的技術(shù)與實(shí)力。