Доступ к S3 с помощью PXF

В этом документе описывается, как PXF получает доступ к данным в Amazon S3, и приводятся примеры использования.

Platform Extension Framework (PXF) использует Foreign Data Wrapper (FDW) для доступа к данным, хранящимся за пределами базы данных YMatrix. Подробное введение в PXF см. в документации PXF на китайском языке.

1 Процедура

1.1 Настройка службы PXF

На хосте MXMaster войдите под пользователем mxadmin и отредактируйте файл конфигурации PXF для доступа к S3: s3-site.xml, расположенный по пути /usr/local/pxfconf/servers/s3server_online/s3-site.xml.

$ vim /usr/local/pxfconf/servers/s3server_online/s3-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>fs.s3a.endpoint</name>
        <value>http:xxx</value>
    </property>
    <property>
        <name>fs.s3a.access.key</name>
        <value>xxx</value>
    </property>
    <property>
        <name>fs.s3a.secret.key</name>
        <value>xxx</value>
    </property>
    <property>
        <name>fs.s3a.fast.upload</name>
        <value>true</value>
    </property>
</configuration>

Описание параметров:

  • fs.s3a.endpoint: конечная точка сервиса объектного хранилища. Для локальных развертываний используйте http://<IP>:<port>. В облачных средах укажите доступное доменное имя.
  • fs.s3a.access.key: ключ доступа, используемый для аутентификации в объектном хранилище.
  • fs.s3a.secret.key: секретный ключ, используемый для аутентификации в объектном хранилище.

1.2 Синхронизация конфигурационных файлов и перезапуск PXF

Примечание!
Все шаги в этом разделе необходимо выполнять на хосте MXMaster под пользователем mxadmin.

Синхронизируйте конфигурационные файлы PXF на всех узлах кластера:

$ pxf cluster sync

Следующий вывод указывает на успешную синхронизацию:

Syncing PXF configuration files from master host to 2 segment hosts...
PXF configs synced successfully on 2 out of 2 hosts

Примечание!
Убедитесь, что конфигурационные файлы корректно синхронизированы в соответствующие каталоги на каждом узле.

Перезапустите службу PXF:

$ pxf cluster restart

Следующий вывод указывает на успешный перезапуск:

Restarting PXF on 2 segment hosts...
PXF restarted successfully on 2 out of 2 hosts

Перезапустите локальный экземпляр PXF:

$ pxf restart

Следующий вывод подтверждает успешный перезапуск экземпляра PXF:

Using CATALINA_BASE:   /usr/local/pxf-matrixdb4/pxf-service
Using CATALINA_HOME:   /usr/local/pxf-matrixdb4/pxf-service
Using CATALINA_TMPDIR: /usr/local/pxf-matrixdb4/pxf-service/temp
Using JRE_HOME:        /usr/local/jdk1805/jre
Using CLASSPATH:       /usr/local/pxf-matrixdb4/pxf-service/bin/bootstrap.jar:/usr/local/pxf-matrixdb4/pxf-service/bin/tomcat-juli.jar
Using CATALINA_PID:    /usr/local/pxf-matrixdb4/run/catalina.pid
Tomcat stopped.
Using CATALINA_BASE:   /usr/local/pxf-matrixdb4/pxf-service
Using CATALINA_HOME:   /usr/local/pxf-matrixdb4/pxf-service
Using CATALINA_TMPDIR: /usr/local/pxf-matrixdb4/pxf-service/temp
Using JRE_HOME:        /usr/local/jdk1805/jre
Using CLASSPATH:       /usr/local/pxf-matrixdb4/pxf-service/bin/bootstrap.jar:/usr/local/pxf-matrixdb4/pxf-service/bin/tomcat-juli.jar
Using CATALINA_PID:    /usr/local/pxf-matrixdb4/run/catalina.pid
Tomcat started.
Checking if tomcat is up and running...
Server: PXF Server
Checking if PXF webapp is up and running...
PXF webapp is listening on port 5888

1.3 Создание тестовой таблицы

На хосте MXMaster подключитесь к базе данных с помощью клиента psql под пользователем mxadmin:

$ psql <databasename>

Создайте расширение pxf_fdw.

Примечание!
Для создания расширений в YMatrix требуются права суперпользователя.

=# CREATE EXTENSION pxf_fdw;

Ниже представлены два способа создания сервера S3. Выберите один из них.

  1. Создание сервера S3 суперпользователем
    Имя сервера (s3server_online) должно соответствовать имени ранее созданного каталога (s3server_online).
=# CREATE SERVER s3server_online FOREIGN DATA WRAPPER s3_pxf_fdw OPTIONS(config 's3server_online');
  1. Создание сервера S3 обычным пользователем
    Чтобы позволить обычному пользователю создать сервер S3, сначала предоставьте необходимые привилегии.

Примечание!
Выполнение команды GRANT требует прав суперпользователя.

=# GRANT USAGE ON FOREIGN DATA WRAPPER s3_pxf_fdw TO <role_name>;

Имя сервера (s3server_online) должно совпадать с именем ранее созданного каталога (s3server_online).

=# CREATE SERVER s3server_online FOREIGN DATA WRAPPER s3_pxf_fdw OPTIONS(config 's3server_online');

Создайте отображение пользователя:

=# CREATE USER MAPPING FOR mxadmin SERVER s3server_online;

Создайте внешнюю таблицу:

=# CREATE FOREIGN TABLE public.test (
    c1 jsonb,
    c2 text,
    c3 text,
    c4 text,
    c5 text,
    c6 jsonb,
    c7 jsonb
)
SERVER s3server_online
OPTIONS (
    format 'csv',
    resource '/<bucket_name>/<prefix>/<filename.csv>',
    JSONIFY_ARRAY 'TRUE',
    JSONIFY_MAP 'TRUE',
    JSONIFY_RECORD 'TRUE'
);

Описание параметров:

  • format: формат файла, хранящегося в объектном хранилище. Поддерживаемые форматы включают csv, text, json, parquet, avro и т.д.
  • resource: абсолютный путь к файлу в S3.