SPI 概觀¶
當您實作新的 Presto 外掛程式時,您會實作由 SPI 定義的介面和覆寫方法。
外掛程式可以提供額外的連接器、類型、函數和系統存取控制。特別是,連接器是 Presto 中所有查詢的資料來源:它們支援 Presto 可用的每個目錄。
程式碼¶
SPI 原始碼可以在 Presto 原始碼樹狀結構根目錄的 presto-spi
目錄中找到。
外掛程式中繼資料¶
每個外掛程式都會識別一個進入點:Plugin
介面的實作。此類別名稱透過標準 Java ServiceLoader
介面提供給 Presto:類別路徑包含一個名為 com.facebook.presto.spi.Plugin
的資源檔案,位於 META-INF/services
目錄中。此檔案的內容是單行,列出外掛程式類別的名稱
com.facebook.presto.example.ExamplePlugin
對於包含在 Presto 原始碼中的內建外掛程式,只要外掛程式的 pom.xml
檔案包含以下程式碼行,就會建立此資源檔案
<packaging>presto-plugin</packaging>
外掛程式¶
Plugin
介面是開發人員想要了解 Presto SPI 的一個很好的起點。它包含存取方法,可擷取外掛程式可以提供的各種類別。例如,getConnectorFactories()
方法是 Presto 呼叫的頂層函數,用於擷取 ConnectorFactory
,當 Presto 準備好建立連接器執行個體以支援目錄時。對於 Type
、ParametricType
、Function
、SystemAccessControl
和 EventListenerFactory
物件,也有類似的方法。
透過 Maven 建置外掛程式¶
外掛程式取決於 Presto 的 SPI
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-spi</artifactId>
<scope>provided</scope>
</dependency>
外掛程式使用 Maven provided
範圍,因為 Presto 在執行階段提供來自 SPI 的類別,因此外掛程式不應將它們包含在外掛程式組合中。
Presto 還提供一些其他相依性,包括 Slice 和 Jackson 註釋。特別是,Jackson 用於序列化連接器控制代碼,因此外掛程式必須使用 Presto 提供的註釋版本。
所有其他相依性都基於外掛程式本身實作所需的內容。外掛程式會載入到個別的類別載入器中,以提供隔離,並允許外掛程式使用 Presto 內部使用的不同版本程式庫。
如需範例 pom.xml
檔案,請參閱 Presto 原始碼樹狀結構根目錄中 presto-example-http
目錄中的範例 HTTP 連接器。
部署自訂外掛程式¶
為了將自訂外掛程式新增至 Presto 安裝,請在 Presto 外掛程式目錄中為該外掛程式建立一個目錄,並將外掛程式所需的所有 jar 新增至該目錄。例如,對於名為 my-functions
的外掛程式,您會在 Presto 外掛程式目錄中建立一個 my-functions
目錄,並將相關 jar 新增至該目錄。
依預設,外掛程式目錄是相對於 Presto 安裝所在目錄的 plugin
目錄,但可以使用組態變數 catalog.config-dir
進行設定。為了讓 Presto 偵測到新的外掛程式,您必須重新啟動 Presto。
外掛程式必須安裝在 Presto 叢集中的所有節點 (協調器和工作節點) 上。