Hologres(中文名交互式分析)是阿里云自研的一站式實時數(shù)倉被碗,這個云原生系統(tǒng)融合了實時服務(wù)和分析大數(shù)據(jù)的場景,全面兼容PostgreSQL協(xié)議并與大數(shù)據(jù)生態(tài)無縫打通,能用同一套數(shù)據(jù)架構(gòu)同時支持實時寫入實時查詢以及實時離線聯(lián)邦分析谭期。它的出現(xiàn)簡化了業(yè)務(wù)的架構(gòu)茬高,與此同時為業(yè)務(wù)提供實時決策的能力兆旬,讓大數(shù)據(jù)發(fā)揮出更大的商業(yè)價值。從阿里集團誕生到云上商業(yè)化怎栽,隨著業(yè)務(wù)的發(fā)展和技術(shù)的演進丽猬,Hologres也在持續(xù)不斷優(yōu)化核心技術(shù)競爭力,為了讓大家更加了解Hologres熏瞄,我們計劃持續(xù)推出Hologres底層技術(shù)原理揭秘系列脚祟,從高性能存儲引擎到高效率查詢引擎,高吞吐寫入到高QPS查詢等强饮,全方位解讀Hologres由桌,請大家持續(xù)關(guān)注!
本期我們將帶來Hologres高性能原生加速查詢MaxCompute的技術(shù)原理解析胡陪。
隨著數(shù)據(jù)收集手段不斷豐富沥寥,行業(yè)數(shù)據(jù)大量積累,數(shù)據(jù)規(guī)模已增長到了傳統(tǒng)軟件行業(yè)無法承載的海量數(shù)據(jù)(TB柠座、PB邑雅、EB)級別,MaxCompute(原名ODPS)也因此應(yīng)運而生妈经,致力于批量結(jié)構(gòu)化數(shù)據(jù)的存儲和計算淮野,提供海量數(shù)據(jù)倉庫的解決方案及分析建模服務(wù),是一種快速吹泡、完全托管的EB級數(shù)據(jù)倉庫解決方案骤星。
Hologres在離線大數(shù)據(jù)場景上與MaxCompute天然無縫融合,無需數(shù)據(jù)導入導出就能實現(xiàn)加速查詢MaxCompute爆哑,全兼容訪問各種MaxCompute文件格式洞难,實現(xiàn)對PB級離線數(shù)據(jù)的毫秒級交互式分析。而這一切的背后揭朝,都離不開Hologres背后的執(zhí)行器SQE(S Query Engine)队贱,通過SQE實現(xiàn)對MaxCompute的Native訪問,然后再結(jié)合Hologres高性能分布式執(zhí)行引擎HQE的處理潭袱,達到極致性能柱嫌。
Hologres加速查詢MaxCompute主要有以下幾個優(yōu)勢:
- 高性能:可以直接對MaxCompute數(shù)據(jù)加速查詢,具有亞秒級響應(yīng)的查詢性能屯换,在OLAP場景可以直接即席查詢编丘,滿足絕大多數(shù)報表等分析場景。
- 低成本:MaxCompute經(jīng)過數(shù)年的發(fā)展,用戶在MaxCompute上存儲了大量數(shù)據(jù)嘉抓,不需要冗余一份存儲可直接進行訪問索守;另一方面用戶可以只需將部分高性能場景的數(shù)據(jù)遷移到SSD上,報表等分析場景的數(shù)據(jù)可以存儲在MaxCompute進一步降低成本抑片。
- 更高效:實現(xiàn)對MaxCompute的Native訪問蕾盯,無需遷移和導入數(shù)據(jù),就可以高性能和全兼容的訪問各種MaxCompute文件格式蓝丙,以及Hash/Range Clustered Table等復雜表级遭,降低用戶的使用成本。
SQE 架構(gòu)介紹
如上圖所示是SQE的整體架構(gòu)渺尘,可以看出整個架構(gòu)也是非常簡單挫鸽。MaxCompute的數(shù)據(jù)統(tǒng)一存儲在Pangu,當Hologres執(zhí)行一條Query去加速查詢MaxCompute的數(shù)據(jù)時鸥跟,在Hologres端:
- Hologres Frontend通過RPC向SQE Master請求獲取Meta等相關(guān)信息丢郊。
- Hologres Blackhole 通過 RPC 向 SQE Executor 請求獲取具體的數(shù)據(jù)相關(guān)信息。
- SQE由兩種角色的進程組成:
- SQE Master負責處理Meta相關(guān)的請求医咨,主要負責獲取表枫匾、分區(qū)元數(shù)據(jù)、鑒權(quán)以及文件分片等功能拟淮。
- SQE Executor作為SQE的核心干茉,負責具體讀取數(shù)據(jù)請求,涉及Block Cache很泊、預讀取角虫、UDF 處理、表達式下推處理委造、索引處理戳鹅、Metric、Meter等等功能昏兆。
MaxCompute外表引擎核心技術(shù)創(chuàng)新
基于SQE的架構(gòu)枫虏,能做到對MaxCompute的數(shù)據(jù)高性能加速查詢,主要是基于以下技術(shù)創(chuàng)新優(yōu)勢:
1)抽象分布式外表
結(jié)合MaxCompute的分布式特性爬虱,Hologres抽象了一個分布式的外表隶债,來支持訪問MaxCompute分布式數(shù)據(jù)。目前可支持訪問跨集群的MaxCompute分布式盤古文件饮潦,并按MaxCompute計算集群就近讀取燃异。
2)和 MaxCompute Meta無縫互通携狭,支持帶版本的元數(shù)據(jù)緩存
SQE和MaxCompute 的 Meta 無縫互通继蜡,可以做到 Meta 和 Data 實時獲取,支持通過Import Foreign Schema命令,自動同步MaxCompute的元數(shù)據(jù)到Hologres的外表稀并,實現(xiàn)外表的自動創(chuàng)建仅颇,結(jié)構(gòu)自動更新。
3)支持UDF/表達式下推
SQE 通過支持 UDF/表達式下推碘举,來實現(xiàn)用戶自定義的UDF計算忘瓦;將表達式下推可以減少無用的數(shù)據(jù)傳輸帶來的開銷,進一步提升性能引颈。
4)異步ORC Reader耕皮,異步prefetch
目前MaxCompute大部分數(shù)據(jù)為ORC格式,在Hologres V0.10及以上版本蝙场,Hologres更新了執(zhí)行引擎凌停,使用異步 Reader 進行更高效的異步讀取,還支持異步prefetch售滤,進一步降低讀取延遲罚拟;此外Hologres支持了 **IO 合并、LazyRead完箩、Lazy Decoding **等一些列的優(yōu)化技術(shù)手段赐俗,來降低在 IO 在整個查詢上的延遲,以帶來極致性能弊知。
5)支持Block Cache
為了避免每次讀數(shù)據(jù)都用IO到文件中取阻逮,SQE同樣使用BlockCache把常用和最近用的數(shù)據(jù)放在內(nèi)存中,減少不必要的IO秩彤,加快讀的性能夺鲜。在同一個節(jié)點內(nèi),通過一致性Hash實現(xiàn)將相同訪問的數(shù)據(jù)共享一個Block Cache呐舔。 比如在Scan 場景可帶來2倍以上的性能提升币励,大大提升查詢性能。
6)常駐進程珊拼,減少調(diào)度開銷
傳統(tǒng)的進程模型等架構(gòu)需要動態(tài)實時的創(chuàng)建進程等調(diào)度操作食呻,帶來了較大的調(diào)度開銷。SQE 采用常駐進程模式澎现,避免不必要的調(diào)度開銷仅胞,此外還可以大大提升Block Cache的命中率和有效使用率。
7)Network Shuffle剑辫,減少落盤開銷
Network Shuffle需要提供一種快速且穩(wěn)定的容錯機制干旧。由于Network Shuffle必須保證發(fā)送端和接收端進程同時alive才能完成數(shù)據(jù)shuffle。同樣的妹蔽,如果采用傳統(tǒng)落盤的方式來進行Network Shuffle的Retry椎眯,雖然能夠保證穩(wěn)定性挠将,但是可能會在Retry過程中由于磁盤IO引入比較大的性能overhead。為了解決這個問題编整,我們優(yōu)化了分階段調(diào)度來解決快速穩(wěn)定的容錯問題舔稀。
MaxCompute外表引擎升級到HQE
上面提到了我們通過SQE進行加速查詢MaxCompute外表,通過SQE查詢時性能可以做到很好掌测,但是和Hologres交互時中間會有一層RPC 交互内贮,在數(shù)據(jù)量較大時網(wǎng)絡(luò)會存在一定瓶頸。
因此我們基于Hologres已有的能力汞斧,在Hologres V0.10及以上版本我們對執(zhí)行引擎進行了優(yōu)化夜郁,支持Hologres HQE查詢引擎直讀MaxCompute 表,在性能上得到進一步的提升粘勒,較SQE方式讀取有 30%以上的性能提升拂酣。
這主要得益于以下幾個方面:
- 節(jié)省了 SQE 和 Hologres中間 RPC 的交互,相當于節(jié)省一次數(shù)據(jù)的序列化和反序列化仲义,在性能上得到進一步的提升婶熬。
- 可以復用Hologres的Block Cache,這樣第二次查詢時無需訪問存儲埃撵,避免存儲IO赵颅,直接從內(nèi)存訪問數(shù)據(jù),更好的加速查詢暂刘。
- 可以復用已有的Filter 下推能力饺谬,減少需要處理的數(shù)據(jù)量。
- 在底層的IO層實現(xiàn)了預讀和Cache谣拣,更進一步加速Scan時的性能募寨。
以下是某客戶某實際在線業(yè)務(wù)查詢的性能數(shù)據(jù):
E2E運行時間 | SQL Num | SQE查詢性能(平均響應(yīng)) | HQE查詢性能(平均響應(yīng)) | 性能提升 |
---|---|---|---|---|
2-10s | 547 | 4,956 ms | 2,609 ms | +47.34% |
10-30s | 207 | 16,757 ms | 5,457 ms | +67.43% |
30s以上 | 63 | 78,686 ms | 12,666 ms | +83.90% |
Total | 817 | 13,631 ms | 4,106 ms | +69.87% |
執(zhí)行817個SQL,總體性能提升70%森缠,其中長 Query 提升80%以上拔鹰。
MaxCompute加速場景選擇
在Hologres中加速查詢MaxCompute有兩種方式:
1)創(chuàng)建外表(數(shù)據(jù)還是存儲在MaxCompute中),性能相比在MaxCompute中查詢會有2-5倍的提升
2)導入內(nèi)表贵涵,性能相比外表約有10-100倍的提升
創(chuàng)建外表的方式其原理就是PostgreSQL中的Foreign Data Wrappers列肢,通過外部訪問接口,來訪問存儲在外部的數(shù)據(jù)宾茂。建議您使用更方便的IMPORT FOREIGN SCHEMA 方式來創(chuàng)建外表瓷马,可以更好的簡化元數(shù)據(jù)的同步,無需關(guān)注字段類型映射等跨晴。
直接建外表并的方式實際上是利用查詢引擎的優(yōu)化能力來提高效率的欧聘,但是沒有利用到Hologres的索引能力。所以當把外表導到內(nèi)表的時候端盆,可以根據(jù)查詢的方式指定內(nèi)表的索引結(jié)構(gòu)怀骤,通過這些索引能力帶來更高的查詢性能费封。這就是外表導入內(nèi)表,內(nèi)表的性能更好的原因晒喷,可以充分發(fā)揮數(shù)倉的索引優(yōu)化能力。
目前這兩種方式主要對比如下:
場景/維度 | 性能 | 存儲成本 | 數(shù)據(jù)量 | 索引 | 便捷性 |
---|---|---|---|---|---|
Hologres 內(nèi)表 | 非常好 | 高 | |||
(SSD) | 可支持PB級 | 可支持位圖访敌、聚簇等多種索引 | 需要導入數(shù)據(jù) | ||
Hologres 外表 | 較好 | 低 | |||
(HDD) | 單次query查詢200GB限制 | 只支持ODPS索引 | 無需遷移和導入數(shù)據(jù) |
從上面對比可以看出:
- 如果您是數(shù)據(jù)量很大凉敲、對性能有很高的要求時(比如100ms內(nèi)等),對查詢延遲敏感寺旺,對查詢有SLA要求時爷抓,建議您將數(shù)據(jù)導入Hologres內(nèi)表,進行查詢訪問阻塑。
- 如果是臨時性的探索性分析蓝撇,或者對延遲不敏感的內(nèi)部業(yè)務(wù),可以使用MaxCompute外表方式陈莽,減少數(shù)據(jù)移動渤昌。
- 除上述場景外,您可以根據(jù)具體業(yè)務(wù)情況選擇合適的使用場景走搁。
MaxCompute與Hologres的組合關(guān)系
上面介紹了很多Hologres外表查詢引擎如何加速查詢MaxCompute的場景独柑,但并不是說所有類型的查詢都適合在Hologres的外表引擎上執(zhí)行。
Hologres是針對交互式分析場景設(shè)計的同步的查詢引擎私植,面向的是大數(shù)據(jù)進忌栅,小數(shù)據(jù)出的場景,典型用在Serving和Analytics的場景曲稼。而MaxCompute是針對海量數(shù)據(jù)加工處理處理場景設(shè)計的異步的數(shù)據(jù)加工引擎索绪,面向的是大數(shù)據(jù)進,大數(shù)據(jù)出的場景贫悄,典型用在ETL的場景瑞驱。在ETL的場景,作業(yè)異步提交窄坦,IO接口針對Scan優(yōu)化钱烟,計算過程需要節(jié)點的冗余設(shè)計支撐高可用,需要計算狀態(tài)落盤從而可以在失敗時自動重試嫡丙,而這些都是Hologres不具備的能力拴袭。因此MaxCompute+Hologres組合在一起,形成了數(shù)據(jù)加工+服務(wù)的一站式體驗曙博,減少了數(shù)據(jù)的隔離和冗余拥刻,可以為大數(shù)據(jù)數(shù)倉提供合理的解決方案架構(gòu),支撐實時離線一體化的開發(fā)體驗父泳。
總結(jié)
Hologres通過SQE與MaxCompute深度整合般哼,充分利用Hologres和MaxCompute的優(yōu)勢吴汪,以極致性能為目標,直接就能加速查詢MaxCompute數(shù)據(jù)蒸眠,讓用戶更方便高效的進行交互式分析漾橙,同時也降低了極大的分析成本,實現(xiàn)離線數(shù)倉服務(wù)一體化楞卡。
作者簡介:王奇(花名慧青)霜运,阿里巴巴技術(shù)專家,現(xiàn)從事交互式分析引擎Hologres研發(fā)工作蒋腮。
后續(xù)我們將會陸續(xù)推出有關(guān)Hologres的技術(shù)底層原理揭秘系列淘捡,敬請持續(xù)關(guān)注!