Presto 實(shí)踐 | Prestissimo:使 Presto 性能提升三倍
本文資料來(lái)自2021年12月09日舉辦的?PrestoCon?2021,議題為《Updates from the New PrestoDB C++ Execution Engine》,分享者為來(lái)自?Ahana 的?Deepak Majeti 以及來(lái)自 Intel 的 Dave Cohen, Intel。
本次分享的 PPT 請(qǐng)關(guān)注?過(guò)往記憶大數(shù)據(jù)?公眾號(hào),并回復(fù)?10108?獲取。

本次分享主要包括以下幾個(gè)部分:
?Prestissimo 和 Velox 回顧;?? ?Velox支持的函數(shù);?Parquet 和 S3 支持?TPC-H 查詢(xún)?開(kāi)源協(xié)作?未來(lái)路線(xiàn)
Prestissimo 和 Velox 回顧

?在交互式、批處理、流處理、人工智能等方面具有一致的語(yǔ)義;?最大化利用硬件資源;?使用 C++ 編寫(xiě)以便實(shí)現(xiàn)最高效率
為高性能進(jìn)行相關(guān)的優(yōu)化:
?使用字典編碼(Dictionary encoding)來(lái)實(shí)現(xiàn)零拷貝執(zhí)行?自定義字符串、數(shù)組和 Map 編碼,允許完全向量化的條件表達(dá)式計(jì)算,而不需要額外的數(shù)據(jù)復(fù)制?自適應(yīng)地使用基于數(shù)組的聚合和 normalized keys?用于低延遲的層次化語(yǔ)義感知緩存(Hierarchical semantic-aware cache )?Aria 風(fēng)格的過(guò)濾下推到 TableScan

Velox?支持的函數(shù)



上面是?Velox?中實(shí)現(xiàn)標(biāo)量函數(shù)的方法??梢?jiàn),一個(gè)簡(jiǎn)單的函數(shù)是包裝在 VELOX_UDF_BEGIN 和 VELOX_UDF_END 宏之間。
關(guān)于這部分大家可以參見(jiàn) Velox 的官方文檔:https://facebookincubator.github.io/velox/develop/scalar-functions.html
Parquet 和 S3 支持

Velox 中對(duì) Parquet 的支持是由 Intel 工程師貢獻(xiàn)的;當(dāng)前的實(shí)現(xiàn)是包裝了 DuckDB 的 Parquet Reader(https://github.com/duckdb/duckdb)
?在 Velox 中,DuckDB 被用作嵌入式的類(lèi)庫(kù),在測(cè)試中用作驗(yàn)證的內(nèi)存中參考數(shù)據(jù)庫(kù)。?支持部分過(guò)濾下推
DuckDB 的內(nèi)存格式和 Velox 很類(lèi)似,對(duì)大多數(shù)類(lèi)型都是零拷貝。
當(dāng)然,目前 Velox 的 Parquet Reader 是可插拔的。

Velox 中對(duì)?S3 的支持是由 Ahana 工程師貢獻(xiàn)的;擴(kuò)展了 Velox 的 FileSystem API。也是可插拔的;依賴(lài) AWS C++ SDK;使用 Minio 覆蓋CI。

下面我們來(lái)看下 Prestissimo 中是如何加載 S3 中的 Parquet 文件的:
?Prestissimo 實(shí)現(xiàn)了 Presto Worker REST API;?Control Plane 接受來(lái)自 coordinator 的查詢(xún)片段(query fragment) Post 請(qǐng)求?查詢(xún)片段(query fragment)接著被編譯成 plan;?plan 被映射到 Velox library;?在執(zhí)行中 Velox library 涉及的組件如下:?Tasks, Drivers?TableScan 使用 Connector 抽象;?HiveConnector 接口使用 S3 文件句柄和 Parquet reader 實(shí)例設(shè)置 reader
TPCH 查詢(xún)

?支持 Date 類(lèi)型;?支持 left outer join;?部分支持相關(guān)子查詢(xún);?剩下的3個(gè)查詢(xún)需要對(duì)相關(guān)子查詢(xún)提供更多的支持
開(kāi)源協(xié)作

?當(dāng)前 Velox 社區(qū)是非?;钴S的,提交的 PR 會(huì)被迅速的 reviewed 并解決的;?文檔是最新的,對(duì)初學(xué)者非常有幫助;?社區(qū)每月出版一份 news-letter(如下圖)?Velox Slack 通道支持異步通信和協(xié)作

?
未來(lái)路線(xiàn)

?在 Presto 集群中啟用 Prestissimo;?繼續(xù)為功能和性能添加更多的特性;?通過(guò)運(yùn)行各種工作負(fù)載來(lái)強(qiáng)化 Velox 庫(kù)?添加針對(duì)云存儲(chǔ)和對(duì)象存儲(chǔ)的 I/O 優(yōu)化?支持所有的 TPC-DS 。
相關(guān)資源:
?https://github.com/facebookincubator/velox?https://facebookincubator.github.io/velox/?https://velox-oss.slack.com/
