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