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 會(huì)被拆分成具有層級關(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 并不會(huì)運(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 會(huì)以 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ù)組,存儲(chǔ)一個(gè)字段的若干行圆恤。多個(gè) Block 的橫切的一行表示真實(shí)的一行數(shù)據(jù)突倍。一個(gè) Page 最大1MB,最多1 6x1024 行數(shù)據(jù)盆昙。