作者 | 士心先生
來源 | 程序員的讀書故事 (公眾號(hào):pg_reading)

presto_4.jpg
- Presto協(xié)調(diào)器負(fù)責(zé)接收用戶SQL查詢、解析查詢語句、規(guī)劃查詢執(zhí)行并管理工作節(jié)點(diǎn)。協(xié)調(diào)器是Presto集群的大腦,所有客戶端應(yīng)用程序都會(huì)連接它。用戶可以通過Presto CLI 、使用JDBC或ODBC驅(qū)動(dòng)的應(yīng)用程序以及其他語言下可用的客戶端庫來與協(xié)調(diào)器交互。
- 一個(gè)集群中至少包含一個(gè)協(xié)調(diào)器,可能包含一個(gè)或多個(gè)工作節(jié)點(diǎn)。協(xié)調(diào)器會(huì)跟蹤每個(gè)工作節(jié)點(diǎn)的動(dòng)態(tài),并協(xié)調(diào)查詢?nèi)蝿?wù)的執(zhí)行。對(duì)于一條查詢,協(xié)調(diào)器將創(chuàng)建一個(gè)包含多個(gè)Stage(階段)的邏輯模型。
- 一旦接收到一條SQL語句,協(xié)調(diào)器就負(fù)責(zé)解析、分析、優(yōu)化和調(diào)度查詢?nèi)蝿?wù)在Presto工作節(jié)點(diǎn)上的執(zhí)行。查詢語句被翻譯成一系列相連的任務(wù)task,這些任務(wù)被分發(fā)到各個(gè)工作節(jié)點(diǎn)上執(zhí)行。
- 在工作節(jié)點(diǎn)處理數(shù)據(jù)的同時(shí),協(xié)調(diào)器會(huì)將結(jié)果抽取出來放到輸出緩沖器中,并將緩沖區(qū)的內(nèi)容暴露給客戶端。
- 一旦客戶端讀完輸出緩沖器的內(nèi)容,協(xié)調(diào)器就會(huì)代表客戶端向工作節(jié)點(diǎn)請(qǐng)求更多的數(shù)據(jù)。另外,工作節(jié)點(diǎn)也在不斷地與數(shù)據(jù)源交互并從中讀取數(shù)據(jù)。最終,客戶端不斷地請(qǐng)求數(shù)據(jù),工作節(jié)點(diǎn)則不斷地從數(shù)據(jù)源讀取數(shù)據(jù)并提供給客戶端,直到查詢執(zhí)行結(jié)束。