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 準備好建立連接器執行個體以支援目錄時。對於 TypeParametricTypeFunctionSystemAccessControlEventListenerFactory 物件,也有類似的方法。

透過 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 叢集中的所有節點 (協調器和工作節點) 上。