當(dāng)前Hadoop技術(shù)蓬勃發(fā)展,用于解決大數(shù)據(jù)的分析難題的技術(shù)平臺(tái)開始涌現(xiàn)。Spark憑借性能強(qiáng)勁、高度容錯(cuò)、調(diào)度靈活等技術(shù)優(yōu)勢(shì)已漸漸成為主流技術(shù),業(yè)界大部分廠商都提供了基于Spark的技術(shù)方案和產(chǎn)品。根據(jù)Databricks的統(tǒng)計(jì),目前有11個(gè)商業(yè)的Spark版本。
在使用Spark作出計(jì)算平臺(tái)的解決方案中,有兩種主流編程模型,一類是基于Spark API或者衍生出來的語(yǔ)言,另一種是基于SQL語(yǔ)言。SQL作為數(shù)據(jù)庫(kù)領(lǐng)域的事實(shí)標(biāo)準(zhǔn)語(yǔ)言,相比較用API(如MapReduce API,Spark API等)來構(gòu)建大數(shù)據(jù)分析的解決方案有著先天的優(yōu)勢(shì):一是產(chǎn)業(yè)鏈完善,各種報(bào)表工具、ETL工具等可以很好的對(duì)接;二是用SQL開發(fā)有更低的技術(shù)門檻;三是能夠降低原有系統(tǒng)的遷移成本等。因此,SQL語(yǔ)言也漸漸成為大數(shù)據(jù)分析的主流技術(shù)標(biāo)準(zhǔn)。本文將深入解析Inceptor的架構(gòu)、編程模型和編譯優(yōu)化技術(shù),并提供基準(zhǔn)測(cè)試在多平臺(tái)上的性能對(duì)比數(shù)據(jù)。
1. Inceptor架構(gòu)
Transwarp Inceptor是基于Spark的分析引擎,如圖1所示,從下往上有三層架構(gòu):最下面是存儲(chǔ)層,包含分布式內(nèi)存列式存儲(chǔ)(Transwarp Holodesk),可建在內(nèi)存或者SSD上;中間層是Spark計(jì)算引擎層,星環(huán)做了大量的改進(jìn)保證引擎有超強(qiáng)的性能和高度的健壯性;最上層包括一個(gè)完整的SQL 99和PL/SQL編譯器、統(tǒng)計(jì)算法庫(kù)和機(jī)器學(xué)習(xí)算法庫(kù),提供完整的R語(yǔ)言訪問接口。
圖1:Transwarp Inceptor架構(gòu)圖
Transwarp Inceptor可以分析存儲(chǔ)在HDFS、HBase或者Transwarp Holodesk分布式緩存中的數(shù)據(jù),可以處理的數(shù)據(jù)量從GB到數(shù)十TB,即使數(shù)據(jù)源或者中間結(jié)果的大小遠(yuǎn)大于內(nèi)存容量也可高效處理。另外Transwarp Inceptor通過改進(jìn)Spark和YARN的組合,提高了Spark的可管理性。同時(shí)星環(huán)不僅僅是將Spark作為一個(gè)缺省計(jì)算引擎,也重寫了SQL編譯器,提供更加完整的SQL支持。
同時(shí),Transwarp Inceptor還通過改進(jìn)Spark使之更好地與HBase融合,可以為HBase提供完整的SQL支持,包括批量SQL統(tǒng)計(jì)、OLAP分析以及高并發(fā)低延時(shí)的SQL查詢能力,使得HBase的應(yīng)用可以從簡(jiǎn)單的在線查詢應(yīng)用擴(kuò)展到復(fù)雜分析和在線應(yīng)用結(jié)合的混合應(yīng)用中,大大拓展了HBase的應(yīng)用范圍。
2. 編程模型
Transwarp Inceptor提供兩種編程模型:一是基于SQL的編程模型,用于常規(guī)的數(shù)據(jù)分析、數(shù)據(jù)倉(cāng)庫(kù)類應(yīng)用市場(chǎng);二是基于數(shù)據(jù)挖掘編程模型,可以利用R語(yǔ)言或者Spark MLlib來做一些深度學(xué)習(xí)、數(shù)據(jù)挖掘等業(yè)務(wù)模型。
2.1 SQL模型
Transwarp Inceptor實(shí)現(xiàn)了自己的SQL解析執(zhí)行引擎,可以兼容SQL 99和HiveQL,自動(dòng)識(shí)別語(yǔ)法,因此可以兼容現(xiàn)有的基于Hive開發(fā)的應(yīng)用。由于Transwarp Inceptor完整支持標(biāo)準(zhǔn)的SQL 99標(biāo)準(zhǔn),傳統(tǒng)數(shù)據(jù)庫(kù)上運(yùn)行的業(yè)務(wù)可以非常方便的遷移到Transwarp Inceptor系統(tǒng)上。此外Transwarp Inceptor支持PL/SQL擴(kuò)展,傳統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)的基于PL/SQL存儲(chǔ)過程的應(yīng)用(如ETL工具)可以非常方便的在Inceptor上并發(fā)執(zhí)行。另外Transwarp Inceptor支持部分SQL 2003標(biāo)準(zhǔn),如窗口統(tǒng)計(jì)功能、安全審計(jì)功能等,并對(duì)多個(gè)行業(yè)開發(fā)了專門的函數(shù)庫(kù),因此可以滿足多個(gè)行業(yè)的特性需求。
2.2 數(shù)據(jù)挖掘計(jì)算模型
Transwarp Inceptor實(shí)現(xiàn)了機(jī)器學(xué)習(xí)算法庫(kù)與統(tǒng)計(jì)算法庫(kù),支持常用機(jī)器學(xué)習(xí)算法并行化與統(tǒng)計(jì)算法并行化,并利用Spark在迭代計(jì)算和內(nèi)存計(jì)算上的優(yōu)勢(shì),將并行的機(jī)器學(xué)習(xí)算法與統(tǒng)計(jì)算法運(yùn)行在Spark上。例如:機(jī)器學(xué)習(xí)算法庫(kù)有包括邏輯回歸、樸素貝葉斯、支持向量機(jī)、聚類、線性回歸、關(guān)聯(lián)挖掘、推薦算法等,統(tǒng)計(jì)算法庫(kù)包括均值、方差、中位數(shù)、直方圖、箱線圖等。Transwarp Inceptor可以支持用R語(yǔ)言或者Spark API在平臺(tái)上搭建多種分析型應(yīng)用,例如用戶行為分析、精準(zhǔn)營(yíng)銷、對(duì)用戶貼標(biāo)簽、進(jìn)行分類。
3. SQL編譯與優(yōu)化
Transwarp Inceptor研發(fā)了一套完整的SQL編譯器,包括HiveQL解析器、SQL標(biāo)準(zhǔn)解析器和PL/SQL解析器,將不同的SQL語(yǔ)言解析成中間級(jí)表示語(yǔ)言,然后經(jīng)過優(yōu)化器轉(zhuǎn)換成物理執(zhí)行計(jì)劃。SQL語(yǔ)言解析后經(jīng)過邏輯優(yōu)化器生成中間級(jí)表示語(yǔ)言,而中間表示語(yǔ)言再經(jīng)過物理優(yōu)化器生成最終的物理執(zhí)行計(jì)劃。從架構(gòu)上分,邏輯優(yōu)化器和物理優(yōu)化器都包含基于規(guī)則的優(yōu)化模塊和基于成本的優(yōu)化模塊。
為了和Hadoop生態(tài)更好的兼容,Inceptor為一個(gè)SQL查詢生成Map Reduce上的執(zhí)行計(jì)劃和Spark上的執(zhí)行計(jì)劃,并且可以通過一個(gè)SET命令在兩種執(zhí)行引擎之間切換。
圖2:SQL編譯框架
3.1 SQL編譯與解析
Transwarp Inceptor的SQL編譯器會(huì)根據(jù)輸入的SQL查詢的類型來自動(dòng)選擇不同的解析器,如PL/SQL存儲(chǔ)過程會(huì)自動(dòng)進(jìn)入PL/SQL解析器并生成一個(gè)Spark RDD的DAG從而在Spark平臺(tái)上并行計(jì)算,標(biāo)準(zhǔn)SQL查詢會(huì)進(jìn)入SQL標(biāo)準(zhǔn)解析器生成Spark或Map Reduce執(zhí)行計(jì)劃。由于HiveQL和標(biāo)準(zhǔn)的SQL有所出入,為了兼容HiveQL,Transwarp Inceptor保留了HiveQL解析器,并可以對(duì)非標(biāo)準(zhǔn)SQL的Hive查詢生成Spark或者M(jìn)ap Reduce執(zhí)行計(jì)劃。
3.1.1 SQL 標(biāo)準(zhǔn)解析器
Transwarp Inceptor構(gòu)建了自主研發(fā)的SQL標(biāo)準(zhǔn)解析器,用于解析SQL 99 & SQL 2003查詢并生成Spark和Map Reduce的執(zhí)行計(jì)劃。詞法和語(yǔ)法分析層基于Antlr語(yǔ)法來構(gòu)建詞法范式,通過Antlr來生成抽象語(yǔ)義樹,并會(huì)通過一些上下文的語(yǔ)義來消除沖突并生成正確的抽象語(yǔ)義樹。語(yǔ)義分析層解析上層生成的抽象語(yǔ)義樹,根據(jù)上下文來生成邏輯執(zhí)行計(jì)劃并傳遞給優(yōu)化器。首先Transwarp Inceptor會(huì)將SQL解析成TABLE SCAN、SELECT、FILTER、JOIN、UNION、ORDER BY、GROUP BY等主要的邏輯塊,接著會(huì)根據(jù)一些Meta信息進(jìn)一步細(xì)化各個(gè)邏輯塊的執(zhí)行計(jì)劃。如TABLE SCAN會(huì)分成塊讀取、塊過濾、行級(jí)別過濾、序列化等多個(gè)執(zhí)行計(jì)劃。
3.1.2 PL/SQL 解析器
PL/SQL是Oracle對(duì)SQL語(yǔ)言的模塊化擴(kuò)展,已經(jīng)在很多行業(yè)中有大規(guī)模的應(yīng)用,是數(shù)據(jù)倉(cāng)庫(kù)領(lǐng)域的重要編程語(yǔ)言。
為了讓存儲(chǔ)過程在Spark上有較好的性能,PL/SQL解析器會(huì)根據(jù)存儲(chǔ)過程中的上下文關(guān)系來生成SQL DAG,然后對(duì)各SQL的執(zhí)行計(jì)劃生成的RDD進(jìn)行二次編譯,通過物理優(yōu)化器將一些沒有依賴關(guān)系的RDD進(jìn)行合并從而生成一個(gè)最終的RDD DAG。因此,一個(gè)存儲(chǔ)過程被解析成一個(gè)大的DAG,從而stage之間可以大量并發(fā)執(zhí)行,避免了多次執(zhí)行SQL的啟動(dòng)開銷并保證了系統(tǒng)的并發(fā)性能。
解析并生成SQL級(jí)別的執(zhí)行計(jì)劃
解析SQL的依賴關(guān)系并生成DAG, 再根據(jù)各個(gè)SQL的執(zhí)行計(jì)劃來生成最終存儲(chǔ)過程的Spark RDD DAG
3.2 SQL優(yōu)化器
Transwarp Inceptor使用Spark作為默認(rèn)計(jì)算引擎,并且開發(fā)了完善的SQL優(yōu)化器,因此在大量的客戶案例性能測(cè)試中,Transwarp Inceptor的性能領(lǐng)先Map Reduce 10-100倍,并超越部分開源MPP數(shù)據(jù)庫(kù)。SQL優(yōu)化器對(duì)平臺(tái)性能的提升居功至偉。
3.2.1 基于規(guī)則的優(yōu)化器(Rule Based Optimizer)
目前為止,Transwarp Inceptor共實(shí)現(xiàn)了一百多個(gè)優(yōu)化規(guī)則,并且在持續(xù)的添加新的規(guī)則。按照功能劃分,這些規(guī)則主要分布在如下幾個(gè)模塊:
文件讀取時(shí)過濾
在文件讀取時(shí)過濾數(shù)據(jù)能夠最大化的減少參與計(jì)算的數(shù)據(jù)量從而最為有效的提高性能,因此Transwarp Inceptor提供了多個(gè)規(guī)則用于生成表的過濾條件。對(duì)于一些SQL中的顯示條件,Transwarp Inceptor會(huì)盡量將過濾前推到讀取表中;而對(duì)于一些隱式的過濾條件,如可以根據(jù)join key生成的過濾規(guī)則,Inceptor會(huì)根據(jù)語(yǔ)義保證正確性的前提下進(jìn)行規(guī)則生成。
過濾條件前置
Transwarp Inceptor能夠從復(fù)雜的組合過濾條件中篩選出針對(duì)特定表的過濾規(guī)則,然后通過SQL語(yǔ)義來確定是否能將過濾條件前推到盡量早的時(shí)候執(zhí)行。如果有子查詢,過濾條件可以遞歸前推入最低層的子查詢中,從而保證所有的冗余數(shù)據(jù)被刪除。
超寬表的讀取過濾
對(duì)一些列超多的表進(jìn)行處理的時(shí)候,Transwarp Inceptor首先會(huì)根據(jù)SQL語(yǔ)義來確定要讀取的列,并在讀取表的時(shí)候進(jìn)行跨列讀取減少IO和內(nèi)存消耗。而如果表有過濾條件,Inceptor會(huì)做進(jìn)一步優(yōu)化,首先只讀取過濾條件相關(guān)的列來確定該行記錄是否需要被選擇,如果不是就跳過當(dāng)前行的所有列,因此能夠最大程度上的減少數(shù)據(jù)讀取。在一些商業(yè)實(shí)施中,這些優(yōu)化規(guī)則能夠帶來5x - 10x的性能提升。
Shuffle Stage的優(yōu)化與消除
Spark的shuffle實(shí)現(xiàn)的效率非常低,需要把結(jié)果寫磁盤,然后通過HTTP傳輸。Transwarp Inceptor添加了一些shuffle消除的優(yōu)化規(guī)則,對(duì)SQL的DAG中不必要或者是可以合并的shuffle stage進(jìn)行消除或者合并。對(duì)于必須要做Shuffle的計(jì)算任務(wù),Inceptor通過DAGScheduler來提高shuffle的效率:Map Task會(huì)直接將結(jié)果返回給DAGScheduler,然后DAGScheduler將結(jié)果直接交給Reduce Task而不是等待所有Map Task結(jié)束,這樣能夠非常明顯的提升shuffle階段的性能。
Partition消除
Transwarp Inceptor提供單一值Partition和Range Partition,并且支持對(duì)Partition建Bucket來做多次分區(qū)。當(dāng)Partition過多的時(shí)候,系統(tǒng)的性能會(huì)因?yàn)閮?nèi)存消耗和調(diào)度開銷而損失。因此,Inceptor提供了多個(gè)規(guī)則用于消除不必要的Partition,如果上下文中有隱式的對(duì)Partition的過濾條件,Inceptor也會(huì)生成對(duì)partition的過濾規(guī)則。
3.2.2 基于成本的優(yōu)化器(Cost Based Optimizer)
基于規(guī)則的優(yōu)化器都是根據(jù)一些靜態(tài)的信息來產(chǎn)生的,因此很多和動(dòng)態(tài)數(shù)據(jù)相關(guān)的特性是不能通過基于規(guī)則的優(yōu)化來解決,因此Transwarp Inceptor提供了基于成本的優(yōu)化器來做二次優(yōu)化。相關(guān)的原始數(shù)據(jù)主要來自Meta-store中的表統(tǒng)計(jì)信息、RDD的信息、SQL上下文中的統(tǒng)計(jì)信息等。依賴于這些動(dòng)態(tài)的數(shù)據(jù),CBO會(huì)計(jì)算執(zhí)行計(jì)劃的物理成本并選擇最有效的執(zhí)行計(jì)劃。一些非常有效的優(yōu)化規(guī)則包括如下幾點(diǎn):
JOIN順序調(diào)優(yōu)
在實(shí)際的案例中,join是消耗計(jì)算量最多的業(yè)務(wù),因此對(duì)join的優(yōu)化至關(guān)重要。在多表JOIN模型中,Transwarp Inceptor會(huì)根據(jù)統(tǒng)計(jì)信息來預(yù)估join的中間結(jié)果大小,并選擇產(chǎn)生中間數(shù)據(jù)量最小的join順序作為執(zhí)行計(jì)劃。
JOIN類型的選擇
Transwarp Inceptor支持Left-most Join Tree 和 Bush Join Tree,并且會(huì)根據(jù)統(tǒng)計(jì)信息來選擇生成哪種Join模型有最佳性能。此外,Transwarp Inceptor會(huì)根據(jù)原始表或者中間數(shù)據(jù)的大小來選擇是否開啟針對(duì)數(shù)據(jù)傾斜模型下的特殊優(yōu)化等。此外,針對(duì)HBase表是否有索引的情況,Transwarp Inceptor會(huì)在普通Join和Look-up Join間做個(gè)均衡的選擇。
并發(fā)度的控制
Spark通過線程級(jí)并發(fā)來提高性能,但是大量的并發(fā)可能會(huì)帶來不必要的調(diào)度開銷,因此不同的案例在不同并發(fā)度下會(huì)有最佳性能。Transwarp Inceptor通過對(duì)RDD的一些屬性進(jìn)行推算來選擇最佳并發(fā)控制,對(duì)很多的案例有著2x-3x的性能提升。
4.Transwarp Holodesk內(nèi)存計(jì)算引擎
為了有效的降低SQL分析的延時(shí),減少磁盤IO對(duì)系統(tǒng)性能的影響,星環(huán)科技研發(fā)了基于內(nèi)存或者SSD的存儲(chǔ)計(jì)算引擎Transwarp Holodesk,通過將表數(shù)據(jù)直接建在內(nèi)存或者SSD上以實(shí)現(xiàn)SQL查詢?nèi)珒?nèi)存計(jì)算。另外Transwarp Holodesk增加了數(shù)據(jù)索引功能,支持對(duì)多個(gè)數(shù)據(jù)列建索引,從而更大程度的降低了SQL查詢延時(shí)。
4.1 存儲(chǔ)格式
Transwarp Holodesk基于列式存儲(chǔ)做了大量的原創(chuàng)性改進(jìn)帶來更高的性能和更低的數(shù)據(jù)膨脹率。首先數(shù)據(jù)被序列化后存儲(chǔ)到內(nèi)存或SSD上以節(jié)省者資源占用。如圖3所示,每個(gè)表的數(shù)據(jù)被存儲(chǔ)成若干個(gè)Segment,每個(gè)Segment被劃分成若干個(gè)Block,每個(gè)Block按照列方式存儲(chǔ)于SSD或內(nèi)存中。另外每個(gè)Block的頭部都加上Min-Max Filter和Bloom Filter用于過濾無用的數(shù)據(jù)塊,減少不必要的數(shù)據(jù)進(jìn)入計(jì)算階段。
Transwarp Holodesk根據(jù)查詢條件的謂詞屬性對(duì)每個(gè)數(shù)據(jù)塊的對(duì)應(yīng)列構(gòu)建數(shù)據(jù)索引,索引列采用自己研發(fā)的Trie結(jié)構(gòu)進(jìn)行組織存儲(chǔ),非索引列采用字典編碼的方式進(jìn)行組織存儲(chǔ)。Trie不僅能對(duì)具有公共前綴的字符串進(jìn)行壓縮,而且可以對(duì)輸入的字符串排序,從而可以利用二分查找快速查詢所需數(shù)據(jù)的位置,從而快速響應(yīng)查詢需求。
圖3:Holodesk存儲(chǔ)格式
HDFS 2.6支持Storage Tier讓應(yīng)用程序可以選擇存儲(chǔ)層為磁盤或者SSD,但是沒有專用的存儲(chǔ)格式設(shè)計(jì)是無法有效利用SSD的讀寫吞吐量和低延,因此現(xiàn)有的Text以及行列混合(ORC/Parquet)都不能有效的利用SSD的高性能。為此驗(yàn)證存儲(chǔ)結(jié)構(gòu)對(duì)性能的影響,我們將HDFS構(gòu)建在SSD上并選用某基準(zhǔn)測(cè)試來做了進(jìn)一步的性能對(duì)比,結(jié)果如圖4所示:采用文本格式,PCI-E SSD帶來的性能提升僅1.5倍;采用專為內(nèi)存和SSD設(shè)計(jì)的Holodesk列式存儲(chǔ),其性能相比較SSD上的HDFS提升高達(dá)6倍。
圖4:SSD上Holodesk對(duì)HDFS的性能加速比
4.2 性能優(yōu)勢(shì)
某運(yùn)營(yíng)商客戶在12臺(tái)x86服務(wù)器上搭建了Transwarp Inceptor,將Transwarp Holodesk 配置在PCIE-SSD上,并與普通磁盤表以及DB2來做性能對(duì)比測(cè)試。最終測(cè)試數(shù)據(jù)如圖5所示:
圖5:某運(yùn)營(yíng)商Holodesk性能測(cè)試結(jié)果
在純粹的count測(cè)試一項(xiàng),Holodesk性能相對(duì)于磁盤表最高領(lǐng)先32倍;對(duì)于join測(cè)試一項(xiàng),Transwarp Holodesk最高領(lǐng)先磁盤表多達(dá)12倍;在單表聚合測(cè)試中,Holodesk提升倍數(shù)達(dá)10~30倍。另外Transwarp Holodesk在和DB2的對(duì)比中也表現(xiàn)優(yōu)秀,兩個(gè)復(fù)雜SQL查詢?cè)贒B2數(shù)據(jù)庫(kù)中需要運(yùn)行1小時(shí)以上,但是在使用Transwarp Holodesk均是分鐘級(jí)和秒級(jí)就返回結(jié)果。
內(nèi)存的價(jià)格大約是同樣容量SSD的十倍左右,為了給企業(yè)提供更高性價(jià)比的計(jì)算方案,Transwarp Holodesk針對(duì)SSD進(jìn)行了大量的優(yōu)化,使得應(yīng)用在SSD上運(yùn)行具有與在內(nèi)存上比較接近的性能,從而為客戶提供了性價(jià)比更高的計(jì)算平臺(tái)。
在對(duì)TPC-DS的IO密集型查詢的測(cè)試中,無論上構(gòu)建在PCI-E SSD還是內(nèi)存上,Holodesk對(duì)比磁盤表有一個(gè)數(shù)量級(jí)上的性能提升;而SSD上的Holodesk性能只比內(nèi)存差10%左右。
圖6:數(shù)據(jù)在磁盤、SSD和內(nèi)存中的性能表現(xiàn)
5. 穩(wěn)定的Spark執(zhí)行引擎
企業(yè)目前應(yīng)用開源Spark的主要困難在穩(wěn)定性、可管理性和功能不夠豐富上。開源Spark在穩(wěn)定性上還有比較多的問題,在處理大數(shù)據(jù)量時(shí)可能無法運(yùn)行結(jié)束或出現(xiàn)Out of memory,性能時(shí)快時(shí)慢,有時(shí)比Map/Reduce更慢,無法應(yīng)用到復(fù)雜數(shù)據(jù)分析業(yè)務(wù)中。
Transwarp Inceptor針對(duì)各種出錯(cuò)場(chǎng)景設(shè)計(jì)了多種解決方法,如通過基于成本的優(yōu)化器選擇最合適的執(zhí)行計(jì)劃、加強(qiáng)對(duì)數(shù)據(jù)結(jié)構(gòu)內(nèi)存使用效率的有效管理、對(duì)常見的內(nèi)存出錯(cuò)問題通過磁盤進(jìn)行數(shù)據(jù)備份等方式,極大提高了Spark功能和性能的穩(wěn)定性,上述問題都已經(jīng)解決并經(jīng)過商業(yè)案例的考驗(yàn)。Transwarp Inceptor能穩(wěn)定的運(yùn)行7*24小時(shí),并能在TB級(jí)規(guī)模數(shù)據(jù)上高效進(jìn)行各種穩(wěn)定的統(tǒng)計(jì)分析。
6. SQL引擎效能驗(yàn)證
TPC-DS是TPC組織為Decision Support System設(shè)計(jì)的一個(gè)測(cè)試集,包含對(duì)大數(shù)據(jù)集的統(tǒng)計(jì)/報(bào)表生成/聯(lián)機(jī)查詢/數(shù)據(jù)挖掘等復(fù)雜應(yīng)用,測(cè)試用的數(shù)據(jù)有各種不同的分布與傾斜,與真實(shí)場(chǎng)景非常接近。隨著國(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)則。
6.1 驗(yàn)證對(duì)比的平臺(tái)和配置
我們搭建了兩個(gè)集群分別用于Transwarp Inceptor與Cloudera Data Hub/Impala的測(cè)試。每個(gè)集群采用4臺(tái)普通兩路x86服務(wù)器搭建,每臺(tái)服務(wù)器硬件配置如下:
考慮到磁盤的容量和HDFS的存儲(chǔ)復(fù)制模式,我們選擇的是500GB的數(shù)據(jù)總量。SQL測(cè)試案例的選擇上,在Cloudera Impala中使用的是由Cloudera改動(dòng)過的TPC-DS測(cè)試子集,在Transwarp Inceptor我們選用的是TPC-DS為Oracle生成的測(cè)試集合,保留了原有的各種復(fù)雜SQL,因此能夠客觀反映出Inceptor在SQL支持上的情況。
6.2 Transwarp Inceptor VS Cloudera Impala
Transwarp Inceptor由于有完善的SQL支持,能夠運(yùn)行全部所有的99個(gè)SQL查詢。而由于Cloudera官方發(fā)布的TPC-DS測(cè)試集只包含19個(gè)SQL案例,因此我們只能運(yùn)行這19個(gè)SQL,實(shí)驗(yàn)證明這部分查詢?cè)贗mpala上全部正常運(yùn)行完成。
圖7是所有的測(cè)試集合的性能對(duì)比圖。圖中縱坐標(biāo)小于1表述測(cè)試案例中Cloudera Impala性能超過Transwarp Inceptor,而大于1則表示Transwarp Inceptor有更好的性能表現(xiàn)。對(duì)于Cloudera Impala不能支持的SQL,我們就標(biāo)記這個(gè)性能比為100。從圖中可見,在Cloudera Impala支持的19個(gè)SQL中,有8個(gè)SQL的表現(xiàn)超過Transwarp Inceptor,2個(gè)表現(xiàn)相當(dāng),另外9個(gè)Transwarp Inceptor比Cloudera Impala表現(xiàn)的更好。
圖7:Transwarp Inceptor與Cloudera Impala的性能比較
6.3 Transwarp Inceptor VS Map Reduce
我們使用了同樣的硬件和軟件配置完成和開源的Hive執(zhí)行效率相比,Transwarp Inceptor能夠帶來10x-100x的性能提升。圖8是TPC-DS的部分SQL查詢?cè)贗nceptor和CDH 5.1 Hive的性能提升倍數(shù),其中最大的提升倍數(shù)竟可達(dá)到123倍。
圖8:Transwarp Inceptor與開源Hive的性能比較
7. 結(jié)語(yǔ)
隨著在大數(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í)力。
劉汪根。2013年加入星環(huán),作為早期員工參與了星環(huán)大數(shù)據(jù)平臺(tái)的構(gòu)建,現(xiàn)擔(dān)任數(shù)據(jù)平臺(tái)部研發(fā)經(jīng)理,主要負(fù)責(zé)與管理星環(huán)大數(shù)據(jù)平臺(tái)數(shù)據(jù)平臺(tái)的研發(fā)工作,如SQL編譯器,Spark執(zhí)行引擎等工作,產(chǎn)品涵括Transwarp Inceptor/Transwarp Stream等軟件。
【編者按】星環(huán)科技從2013年6月開始研發(fā)基于Spark的SQL執(zhí)行引擎,在2013年底推出Transwarp Inceptor 1.0,并落地了國(guó)內(nèi)首個(gè)7x24小時(shí)的商用項(xiàng)目。經(jīng)過1年多的持續(xù)創(chuàng)新與改進(jìn),星環(huán)已經(jīng)在國(guó)內(nèi)落地了數(shù)十個(gè)Inceptor的商用項(xiàng)目。這是一篇星環(huán)Spark解決方案的技術(shù)解析,也是Spark用戶可以效仿的優(yōu)化之道。