SPI (Service Provider Interface)#
Вы можете создавать расширения к CedrusData с помощью плагинов. Внутри плагина вы можете реализовать один или несколько расширений с помощью публичных интерфейсов продукта, называемых SPI (Service Provider Interface).
Типы расширений:
block encodings,
resource group configuration managers,
session property configuration managers,
exchange managers.
Зависимости#
Разработку расширений удобнее всего вести с помощью Maven.
Добавьте зависимость trino-spi
в свой Maven-проект:
<dependency>
<groupId>io.trino</groupId>
<artifactId>trino-spi</artifactId>
<version>458</version>
<scope>provided</scope>
</dependency>
Для использования расширенного набора интерфейсов CedrusData добавьте ссылку на репозиторий CedrusData:
<repositories>
<repository>
<id>cedrusdata</id>
<url>https://downloads.cedrusdata.ru/maven/</url>
</repository>
</repositories>
После этого добавьте зависимость cedrusdata-spi
:
<dependency>
<groupId>io.trino</groupId>
<artifactId>cedrusdata-spi</artifactId>
<version>458-1</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>io.trino</groupId>
<artifactId>trino-spi</artifactId>
</exclusion>
</exclusions>
</dependency>
Плагин#
Класс io.trino.spi.Plugin
реализует несколько методов, которые возвращают конкретные расширения, такие как коннекторы или функции.
Для создания плагина вам необходимо написать собственный класс, который расширяет io.trino.spi.Plugin
и реализует один или несколько его методов.
Метаданные плагина#
Чтобы CedrusData распознал собранный JAR файл как плагин, последний должен содержать файл io.trino.spi.Plugin
в директории META-INF/services
.
Файл должен содержать строку с fully-qualified именем класса плагина. Например:
com.example.plugin.ExamplePlugin
Для плагинов, которые являются частью проекта Trino, этот файл создается автоматически, если проект имеет Maven packagin trino-plugin
:
<packaging>trino-plugin</packaging>
Установка плагина#
С точки зрения CedrusData плагин представляет собой набор JAR-файлов, которые включают как сам плагин, так и его зависимости. Из списка JAR-файлов должны быть исключены все файлы, которые содержат классы в следующих пакетах:
io.trino.spi
com.fasterxml.jackson.annotation
io.airlift.slice
org.openjdk.jol
io.opentelemetry.api
io.opentelemetry.context
Для установки плагина, создайте директорию с уникальным именем в директории plugin
внутри распакованного архива CedrusData и положите в нее все необходимые JAR-файлы.
Примечание
Каждый плагин Trino должен находиться в отдельной директории внутри директории plugin
.
Плагины должны содержать только JAR файлы непосредственно в директории плагина.
Вложенные директории плагина будут проигнорированы.
По умолчанию CedrusData ищет плагины в директории plugin
относительно распакованного архива CedrusData.
Вы можете изменить директорию, в которой будет происходить поиск плагинов, с помощью параметра конфигурации plugin.dir
.
Плагины должны быть установлены на всех узлах CedrusData (координатор и worker).
Сборка плагина#
Если вы работаете над плагином, который является частью проекта Trino, вы можете собрать плагин с помощью команды mvn package
.
Результатом работы команды будет ZIP-архив, который содержит все необходимые зависимости. Это возможно за счет специального типа packaging trino-plugin
.
Если вы работаете над плагином, который не является часть проекта Trino, вам потребуется собрать архив самостоятельно, так как packaging trino-plugin
недоступен для сторонних проектов. Вы можете воспользоваться Maven Assembly Plugin для автоматизации
сборки архива с зависимостями.