Facebook Presto Connector 開發(fā) [1]

Presto 是Facebook 為了交互式查詢數(shù)據(jù)開發(fā)的一個查詢引擎. 前些年開源. 最近開發(fā)了一些connector , 因此想記錄一下presto plugin 的開發(fā)思路.

一個很奇怪的問題是: Facebook 早就開源了presto, 一直不怎么火. 但我最近開始關注的時候就比較喜歡這貨. 可能是Facebook 大廠員工不怎么運營開源社區(qū)的緣故?

思考

不考慮數(shù)據(jù)寫入, 僅僅看查詢, presto 要做的事情無外乎一件:

function(data)

就是把data 作為輸入, 執(zhí)行function后給出結果. 單機性能無法支撐, 就要考慮如何在分布式的環(huán)境下把function 套在需要的數(shù)據(jù)上.

既然需要把 function apply 到對應的data 上, 需要做的事情有如下幾件:

  • metadata: 數(shù)據(jù)存儲在哪里, 數(shù)據(jù)layout
  • 處理分塊邏輯: 既然是分布式計算, 需要'平均'分配計算任務.
  • 處理讀取數(shù)據(jù)邏輯. 根據(jù)查詢需求, 讀取響應的數(shù)據(jù).

Presto Connector 架構

presto_arch.png

以上便是Presto 核心與一個Connector 交互的大體示意圖.

  • ConnectorHandlerResolver 主要是獲取該connector中一些handler的類型信息
  • ConnectorMetadata 主要是維護該catalog下的schema和table信息. 例如, mysql connector中的ConnectorMetadata 實現(xiàn)就需要負責讀取該數(shù)據(jù)庫配置下有哪些database和哪些table, 以及每個table中的column信息
  • ConnectorSplitManger: 主要負責根據(jù)查詢條件和數(shù)據(jù)存儲, 將計算分解成多個Split, 交給Coordinator 調(diào)度. 類似MapReduce中計算InputSplit的概念
  • Read操作可以選擇實現(xiàn)兩個接口: ConnectorPageSourceProviderConnectorRecordSetProvider. 其實RecordSetProvider是更貼近通常數(shù)據(jù)庫的概念的封裝, 更容易理解, presto 會將RecordSetProvider返回的數(shù)據(jù)再左一層Adapter映射到PageXXX的結構上. 而PageSourceProvider 是更底層. 兩個選擇實現(xiàn)一個就可以
  • Write操作同理Read操作, 選擇性實現(xiàn)兩個接口ConnectorRecordSinkProviderConnectorPageSinkProvider中一個接口
  • ConnectorIndexResolver 負責根據(jù)查詢判斷是否使用索引. 選擇性實現(xiàn)
  • ConnectorAccessControl負責數(shù)據(jù)權限, 可以根據(jù)需求實現(xiàn)權限管理. 選擇性實現(xiàn)

總結

因此, 要開發(fā)一個只讀Presto Connector, 最簡單僅僅需要實現(xiàn)ConnectorHandlerResolver, ConnectorMetadata, ConnectorSplitManagerConnectorRecordSetProvider 四個接口然后整合到一個Connector接口的實現(xiàn).

備注: 由于自己開發(fā)的connector開始是基于0.125版本, 但前幾天升級到0.132后發(fā)現(xiàn)presto代碼經(jīng)歷了重構, 原來com.facebook.presto.spi.Connector 已經(jīng)被標記為Deprecated, 新的接口是com.facebook.presto.spi.connector.Connector, 不過大體原理沒有變化, 之前開發(fā)的connector在0.132版本也運行正常.

還有第二篇

--EOF--

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評論 25 709
  • 接上一篇, 補充幾個小問題 0. 計算相關序列化 presto內(nèi)部使用jackson-core進行序列化. 由于是...
    haitaoyao閱讀 4,132評論 1 4
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,638評論 18 399
  • 今天百團納新結束,很想說點什么。 我和文學社的緣分開始于去年這個時間,那天餐廳前熙熙攘攘的新生各式各樣的社團...
    是糖塊啊閱讀 438評論 0 3

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