Presto 架構(gòu)

Presto Server

Coordinator擔(dān)當(dāng) Master 角色,負(fù)責(zé)解析 SQL,生成查詢計(jì)劃,提交查詢?nèi)蝿?wù)給 Worker 執(zhí)行,管理 Worker 節(jié)點(diǎn)。

Worker執(zhí)行任務(wù)和處理數(shù)據(jù)

Data Source

ConnectorConnector 是一個(gè)適配連接器,Presto 使用 Connector 去連接不同的數(shù)據(jù)源,比如 Hive 、關(guān)系型數(shù)據(jù)庫等??梢酝ㄟ^實(shí)現(xiàn)自己的 Connector 去擴(kuò)展數(shù)據(jù)源。

CatalogCatalog 多個(gè) schema 的集合,表示通過 connector 獲取的一種數(shù)據(jù)源,你可以使用 hive connector 的多個(gè) catalog 來代表不同的 hive 集群數(shù)據(jù)源。常見的 catalog 為:mysql catalog,hive catalog 等

Schema表的集合,類似于 Hive、MySQL 中的 database。

Table類似于Hive中的table

查詢 catalog 為 hive,數(shù)據(jù)庫為 test,表為 table1 的語句為

select count(*) from hive.test.table1

Query Model

Statement表示一個(gè) SQL 查詢語句

Query表示 Statement 經(jīng)過解析,生成的執(zhí)行計(jì)劃,查詢計(jì)劃。在 Presto 集群中運(yùn)行的查詢, 一個(gè) Query 由多個(gè) Stage 組成、Task、Driver、Split、Operator 和 Datasource 組成。

Stage查詢執(zhí)行階段,一個(gè) Query 會被拆分成具有層級關(guān)系的多個(gè) Stage 執(zhí)行,一個(gè) Stage 就是查詢執(zhí)行計(jì)劃的一部分。 四種stage:Coordinator_Only:一般表示 DDL,DML 的 Stage。Single:用于聚合子 stages 數(shù)據(jù),并最終將數(shù)據(jù)輸出給終端用戶。比如每個(gè)查詢中的 Root Stage。Fixed:用于接收子 Stage 產(chǎn)生的數(shù)據(jù),并在集群中對這些數(shù)據(jù)進(jìn)行聚合或分組計(jì)算。Source:連接數(shù)據(jù)源,從數(shù)據(jù)源讀取數(shù)據(jù)。

Exchange連接不同的 Stage,用于不同 Stage 之間的數(shù)據(jù)交互Output Buffer:向下游提供數(shù)據(jù),數(shù)據(jù)提供者Exchange Client:從上游讀取數(shù)據(jù),數(shù)據(jù)消費(fèi)者

TaskStage 有多個(gè) Task 組成。Stage 并不會運(yùn)行,只是負(fù)責(zé)管理 Task 和封裝建模。Stage 實(shí)際運(yùn)行的是 Task。每個(gè)Task 處理一個(gè)或者多個(gè) Split。每個(gè) Task 都有對應(yīng)的輸入和輸出。

DriverTask 被分解成一個(gè)或者多個(gè) Driver,并行執(zhí)行多個(gè) Driver 的方式來實(shí)現(xiàn) Task 的并發(fā)執(zhí)行。Driver 是作用于一個(gè) Split 的一系列 Operator 的集合。一個(gè) Driver 處理一個(gè) Split,產(chǎn)生輸出由 Task 收集并傳遞給下游的 Stage 中的一個(gè) Task。一個(gè) Driver 擁有一個(gè)輸入和輸出。

OperatorOperator 表示對一個(gè) Split 的一種操作。比如過濾、轉(zhuǎn)換等。 一個(gè) Operator 一次讀取一個(gè) Split 的數(shù)據(jù),將 Operator 所表示的計(jì)算、操作作用于 Split 的數(shù)據(jù)上,產(chǎn)生輸出。每個(gè) Operator 會以 Page 為最小處理單位分別讀取輸入數(shù)據(jù)和產(chǎn)生輸出數(shù)據(jù)。Operator 每次只讀取一個(gè) Page,輸出產(chǎn)生一個(gè) Page

Split一個(gè)分片表示大的數(shù)據(jù)集合中的一個(gè)小子集,與 MapReduce 中的 Split 概念類似。

PagePresto 中處理的最小數(shù)據(jù)單元。一個(gè) Page 對象包括多個(gè) Block 對象,而每個(gè) Block 對象是一個(gè)字節(jié)數(shù)組,存儲一個(gè)字段的若干行。多個(gè) Block 的橫切的一行表示真實(shí)的一行數(shù)據(jù)。一個(gè) Page 最大1MB,最多1 6x1024 行數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容