Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

Настройка PXF-сервера

Антон Монаков

Чтение или запись данных во внешнее хранилище данных выполняется через PXF-коннектор. Для доступа к внешнему хранилищу данных необходимо указать местоположение сервера, клиентские учетные данные и другие свойства, специфичные для хранилища данных.

PXF-сервер — это специфичная для коннектора именованная конфигурация, которая обеспечивает доступ к определенному внешнему хранилищу данных. Например, определение сервера PXF JDBC может включать настройки класса драйвера JDBC, URL, имя пользователя, пароль и другие свойства, специфичные для соединения и сессии.

Для каждого используемого внешнего хранилища данных требуется создать отдельное определение сервера. Например, чтобы получить доступ к двум кластерам Hadoop, вам необходимо создать конфигурацию PXF Hadoop-сервера для каждого кластера. Чтобы получить доступ к базам данных Oracle и MySQL, необходимо создать одну или несколько конфигураций PXF JDBC для каждой базы данных.

Определение сервера может включать настройки по умолчанию для учетных данных пользователя и других свойств внешнего хранилища данных. Вы можете разрешить пользователям Greengage DB получать доступ к внешнему хранилищу данных с использованием настроек по умолчанию или настроить доступ и другие свойства на уровне каждого пользователя. Это позволяет с помощью одного определения PXF-сервера предоставлять доступ к внешнему хранилищу пользователям Greengage DB с разными учетными данными.

Файлы шаблонов сервера

PXF предоставляет шаблонный файл конфигурации каждого коннектора, содержащий типичный набор свойств, которые необходимо настроить для его использования. В каталоге $PXF_HOME/templates/ хранятся следующие файлы шаблонов конфигурации сервера:

  • adl-site.xml — предоставляет конфигурацию для Azure Data Lake Storage Gen2 с использованием коннектора ADL.

  • core-site.xml — предоставляет основные настройки Hadoop, часто используемые в качестве основы для других коннекторов, обращающихся к HDFS.

  • gs-site.xml — предоставляет конфигурацию для Google Cloud Storage (GCS).

  • hbase-site.xml — предоставляет конфигурацию для Apache HBase.

  • hdfs-site.xml — определяет параметры подключения для доступа к кластерам Hadoop Distributed File System (HDFS).

  • hive-site.xml — предоставляет конфигурацию для Hive Metastore.

  • jdbc-site.xml — позволяет настроить подключение JDBC к реляционным базам данных.

  • mapred-site.xml — предоставляет конфигурацию для заданий MapReduce.

  • minio-site.xml — предоставляет конфигурацию для объектного хранилища MinIO, совместимого с S3.

  • pxf-site.xml — содержит специфичные настройки PXF, например уровни логирования и свойства сервера.

  • s3-site.xml — предоставляет конфигурацию для Amazon Simple Storage Service (S3).

  • wasbs-site.xml — предоставляет конфигурацию для Azure Blob Storage с использованием коннектора WASB.

  • yarn-site.xml — предоставляет конфигурацию для Apache YARN, используемого некоторыми коннекторами PXF для управления ресурсами.

ПРИМЕЧАНИЕ

Шаблонные файлы для коннекторов Hadoop не предназначены для изменения и использования в качестве конфигурации, поскольку они предоставляют только пример необходимой информации. Вместо изменения шаблонов Hadoop скопируйте несколько файлов *-site.xml из кластера Hadoop в вашу конфигурацию PXF Hadoop-сервера.

Конфигурирование сервера

Для настройки коннектора PXF к внешнему хранилищу данных требуется добавить именованную конфигурацию PXF-сервера для соответствующего коннектора. Информация о конфигурации хранится в одном или нескольких файлах <connector>-site.xml, расположенных в каталоге $PXF_BASE/servers/<server_name>/. Имя каталога в $PXF_BASE/servers/ должно соответствовать настроенному имени PXF-сервера.

В PXF также используется специальный сервер с именем default. Во время установки PXF создается пустой каталог $PXF_BASE/servers/default/, который идентифицирует конфигурацию сервера по умолчанию. Вы можете настроить и назначить конфигурацию сервера по умолчанию любому внешнему источнику данных, например кластеру Hadoop или базе данных MySQL, к которой часто обращаетесь. PXF автоматически использует конфигурацию сервера default, если опущена опция SERVER=<server_name> в выражении LOCATION команды CREATE EXTERNAL TABLE.

Настройка сервера включает в себя следующие общие шаги:

  1. Выберите, будете ли вы настраивать PXF-сервер по умолчанию (default) или создадите новый.

  2. Создайте каталог $PXF_BASE/servers/<server_name>.

  3. Скопируйте шаблоны или другие файлы конфигурации в созданный каталог сервера.

  4. Заполните соответствующие значения свойств в шаблоне файла.

  5. Добавьте любые дополнительные свойства и значения конфигурации, необходимые для вашей среды.

  6. Настройте одного или нескольких пользователей для конфигурации сервера, как описано в разделе Настройка пользователя PXF.

  7. Синхронизируйте конфигурацию сервера и пользователя с кластером Greengage DB, выполнив команду pxf cluster sync. Полное описание доступных команд pxf cluster приведено в статье Обзор команд pxf cluster.

После настройки PXF-сервер становится доступным пользователям Greengage DB, которым требуется доступ к соответствующему хранилищу данных. При создании внешней таблицы, которая обращается к внешнему хранилищу данных, пользователю необходимо указать только имя сервера. PXF получает расположение внешнего источника данных и учетные данные доступа из файлов конфигурации сервера и пользователя, хранящихся в каталоге конфигурации сервера. Более подробную информацию об использовании созданной конфигурации можно получить в разделе Использование конфигурации сервера с внешними таблицами.

Приоритет свойств конфигурации

Конфигурация PXF-сервера может включать значения по умолчанию для учетных данных пользователя и других свойств для доступа к внешнему хранилищу. Некоторые коннекторы PXF, например S3 или JDBC, позволяют напрямую указывать определенные свойства сервера с помощью пользовательских параметров в выражении LOCATION команды CREATE EXTERNAL TABLE. Файл <greengage_user_name>-user.xml определяет настройки свойств внешнего хранилища, специфичные для пользователя Greengage DB.

Для пользователя Greengage DB применяются следующие правила приоритета (от высшего к низшему) для получения настроек свойств:

  1. Свойство, указанное в файле <server_name>/<greengage_user_name>-user.xml, переопределяет любое другое значение этого свойства.

  2. Свойство, указанное с помощью пользовательских параметров в выражении LOCATION команды CREATE EXTERNAL TABLE, переопределяет любое значение этого свойства в конфигурации PXF-сервера.

  3. Свойства, указанные в определении PXF-сервера, определяют значения по умолчанию.

Эти правила приоритета позволяют создать одну внешнюю таблицу, к которой могут обращаться несколько пользователей Greengage DB с уникальными учетными данными для внешнего хранилища данных.

Конфигурационный файл pxf-site.xml

PXF включает шаблонный файл pxf-site.xml, содержащий специфичные для PXF параметры конфигурации. Вы можете использовать этот файл, чтобы настроить следующее:

  • Настройки Kerberos или имперсонации пользователя для конфигураций серверов.

  • Базовый каталог для доступа к файлам.

  • Действие, которое выполняется при обнаружении условия переполнения во время записи числовых данных ORC или Parquet.

ПРИМЕЧАНИЕ

Настройки Kerberos и имперсонации пользователя, указанные в файле pxf-site.xml, применяются только к конфигурациям серверов Hadoop и JDBC и не применяются к конфигурациям серверов файловой системы или объектного хранилища.

Свойства в файле pxf-site.xml для PXF-сервера необходимо настроить, если выполнено любое из следующих условий:

  • Удаленная система Hadoop использует аутентификацию Kerberos.

  • Требуется активировать или деактивировать имперсонацию пользователя в удаленной системе Hadoop или внешней базе данных.

  • Требуется активировать или деактивировать ограниченное делегирование Kerberos для PXF-сервера Hadoop.

  • Вы получаете доступ к сетевой файловой системе с помощью конфигурации сервера.

  • Вы получаете доступ к удаленной файловой системе Hadoop или объектного хранилища с помощью конфигурации сервера и хотите разрешить пользователю доступ только к определенному каталогу и подкаталогам.

В файле pxf-site.xml перечислены следующие свойства.

Свойство Описание Значение по умолчанию

pxf.service.kerberos.principal

Имя принципала Kerberos

gpadmin/_HOST@EXAMPLE.COM

pxf.service.kerberos.keytab

Местоположение keytab-файла Kerberos

$PXF_BASE/keytabs/pxf.service.keytab

pxf.service.kerberos.constrained-delegation

Активирует / деактивирует ограниченное делегирование Kerberos. Это свойство применимо только к конфигурациям серверов Hadoop, но не к конфигурациям JDBC

false

pxf.service.kerberos.ticket-renew-thread-enabled

Указывает, должен ли PXF использовать фоновый подпроцесс для обновления тикета на предоставление тикетов (Ticket-Granting Ticket, TGT) Kerberos, когда оставшийся срок его действия достигает окна продления

false

pxf.service.kerberos.ticket-renew-window

Минимальный прошедший срок жизни тикета Kerberos, после которого PXF пытается его продлить. Значение указывается в виде дробного числа в диапазоне от 0 (PXF генерирует новый тикет для всех запросов) до 1 (PXF продляет тикет после окончания срока действия)

0.8 (80%)

pxf.service.kerberos.ticket-renew-max-backoff-seconds

Максимальное время (в секундах) между последовательными попытками продления тикета TGT

300

pxf.service.kerberos.ticket-renew-timeout-seconds

Максимальное время (в секундах), которое может занять продление тикета TGT. Если в течение указанного периода за несколько попыток продления не удается получить новый тикет, попытки продления прекращаются, подпроцесс продления TGT прерывается, а запрос завершается с ошибкой

3600

pxf.service.user.impersonation

Активирует / деактивирует имперсонацию пользователя при подключении к удаленной системе

Если свойство не установлено, значение по умолчанию — true (активировано) для серверов Hadoop и false (деактивировано) для серверов JDBC

pxf.service.user.name

Имя пользователя для подключения к удаленной системе.

Если свойство не установлено, значением по умолчанию является пользователь операционной системы, запускающий процесс PXF, обычно gpadmin. Если свойство установлено, значение по умолчанию зависит от настройки имперсонации пользователя (pxf.service.user.impersonation) и, если вы получаете доступ к Hadoop, от того, защищен ли кластер с помощью Kerberos

Отсутствует; по умолчанию свойство закомментировано

pxf.fs.basePath

Определяет базовый путь или точку общего доступа в удаленной файловой системе.

Свойство должно быть установлено, когда конфигурация сервера используется с профилем, получающим доступ к файлам с помощью профиля file:*. При установке оно применяется ко всем профилям, получающим доступ к файлам, например *:text, *:parquet или *:json. Свойство является необязательным для PXF-сервера, получающего доступ к файлам в Hadoop или в объектном хранилище.

Вы можете использовать это свойство для ограничения доступа к файлам в определенном удаленном каталоге. При установке свойства PXF рассматривает путь к файлу, указанный в выражении LOCATION команды CREATE EXTERNAL TABLE, относительно базового пути и соответствующим образом строит полный удаленный путь

Отсутствует; по умолчанию свойство закомментировано

pxf.ppd.hive

Указывает, включен ли pushdown предикатов для запросов к внешним таблицам, использующим профили hive, hive:rc или hive:orc. Вы можете переопределить эту настройку на уровне таблицы, указав опцию &PPD=<boolean> в предложении LOCATION при создании внешней таблицы

true, pushdown предикатов включен

pxf.sasl.connection.retries

Указывает максимальное количество попыток повторения запроса подключения SASL после получения ошибки GSS initiate failed при возврате отказа в подключении

5

pxf.orc.write.decimal.overflow

Указывает, как PXF обрабатывает числовые данные, превышающие максимальную точность в 38 и переполняющиеся при записи в файл ORC. Допустимы следующие значения: round (округление), error (ошибка) или ignore (игнорирование)

round

pxf.parquet.write.decimal.overflow

Указывает, как PXF обрабатывает числовые данные, превышающие максимальную точность в 38 и переполняющиеся при записи в файл Parquet. Допустимы следующие значения: round (округление), error (ошибка) или ignore (игнорирование)

round

pxf.hdfs.fragmenter.sort-by-date

Указывает, сортирует ли PXF список файлов, полученных из HDFS-совместимых систем, по дате изменения вместо имени файла. Не применяется к серверам PXF JDBC или HBase

false, файлы сортируются по имени

Настройка пользователя PXF

Вы можете настроить доступ к внешнему хранилищу данных на уровне сервера и пользователя.

ПРИМЕЧАНИЕ

Конфигурация PXF на уровне сервера и пользователя наиболее полезна для серверов JDBC.

Учетные данные и свойства доступа к внешнему хранилищу данных для конкретного пользователя Greengage DB настраиваются в файле конфигурации пользователя <greengage_user_name>-user.xml в каталоге конфигурации сервера PXF, $PXF_BASE/servers/<server_name>/. Конфигурация сервера PXF позволяет настроить любое количество пользователей – от нуля до нескольких.

Свойства, указанные в файле конфигурации пользователя, специфичны для коннектора. Вы можете указать любое свойство конфигурации, поддерживаемое сервером коннектора PXF, в файле конфигурации <greengage_user_name>-user.xml.

Чтобы настроить пользователя PXF, выполните следующие действия:

  1. Определите имя пользователя Greengage DB.

  2. Определите сервер PXF, для которого вы хотите настроить доступ пользователя.

  3. Определите имя и значение каждого свойства, которое вы хотите настроить для пользователя.

  4. Создайте или отредактируйте файл $PXF_BASE/servers/<server_name>/<greengage_user_name>-user.xml и добавьте внешний блок configuration:

    <configuration>
    
    </configuration>
  5. Добавьте пару "свойство/значение" для каждого требуемого свойства внутри блока configuration.

  6. Если вы добавляете конфигурацию пользователя в ранее настроенный сервер PXF, синхронизируйте конфигурацию пользователя с кластером Greengage DB.

ПРИМЕЧАНИЕ

Пользователь Greengage DB, который запрашивает или записывает данные во внешнюю таблицу, получает доступ к внешнему хранилищу данных с учетными данными, настроенными для пользователя PXF-сервера. Если для PXF-сервера не настроены специфичные для пользователя учетные данные, пользователь Greengage DB получает доступ к внешнему хранилищу данных с учетными данными по умолчанию, настроенными для PXF-сервера.

Пример

Предположим, вы настроили доступ к базе данных PostgreSQL в конфигурации сервера PXF JDBC с именем pgsrv1. Чтобы разрешить пользователю Greengage DB с именем bill получить доступ к этой базе данных как пользователю PostgreSQL с именем pguser1 и паролем changeme, создайте файл конфигурации пользователя $PXF_BASE/servers/pgsrv1/bill-user.xml со следующими свойствами:

<configuration>
    <property>
        <name>jdbc.user</name>
        <value>pguser1</value>
    </property>
    <property>
        <name>jdbc.password</name>
        <value>changeme</value>
    </property>
</configuration>

Для настройки определенного пути поиска и большего размера извлечения при чтении для пользователя bill добавьте следующие свойства в файл конфигурации bill-user.xml:

<property>
    <name>jdbc.session.property.search_path</name>
    <value>bill_schema</value>
</property>
<property>
    <name>jdbc.statement.fetchSize</name>
    <value>2000</value>
</property>

Использование конфигурации сервера с внешними таблицами

Чтобы получить доступ к внешнему хранилищу данных, укажите имя сервера с помощью параметра SERVER=<server_name> в выражении LOCATION команды CREATE EXTERNAL TABLE. Указанное имя сервера определяет каталог, из которого PXF получает конфигурацию и учетные данные для доступа к внешнему хранилищу данных. Если параметр SERVER=<server_name> не указан, PXF автоматически использует конфигурацию сервера по умолчанию.

Пример

Предварительные требования

Для выполнения практического примера подключитесь к мастер-хосту Greengage DB как gpadmin с помощью psql, как описано в статье Подключение к Greengage DB с использованием psql. Затем создайте тестовую базу данных customers и подключитесь к ней:

DROP DATABASE IF EXISTS customers;
CREATE DATABASE customers;
\c customers

Чтобы создать внешнюю таблицу с использованием протокола PXF, предварительно зарегистрируйте в БД расширение PXF, как описано в разделе Регистрация PXF в БД:

CREATE EXTENSION pxf;

В этом примере используется файл orders.csv, расположенный в бакете customers на хосте S3 storage.example.com и имеющий следующее содержимое:

id,name,price
1,Laptop,999.99
2,Smartphone,499.99
3,Tablet,299.99
4,Monitor,599.99
5,Keyboard,99.99
  1. На мастер-хосте создайте конфигурацию сервера для доступа к объектному хранилищу S3. Созданный файл s3-site.xml основан на шаблоне minio-site.xml. Файл располагается в каталоге $PXF_BASE/servers/example-s3/ и имеет следующее содержимое:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <property>
            <name>fs.s3a.endpoint</name>
            <value>storage.example.com</value>
        </property>
        <property>
            <name>fs.s3a.access.key</name>
            <value>ACCESS_KEY</value>
        </property>
        <property>
            <name>fs.s3a.secret.key</name>
            <value>SECRET_KEY</value>
        </property>
        <property>
            <name>fs.s3a.fast.upload</name>
            <value>true</value>
        </property>
        <property>
            <name>fs.s3a.path.style.access</name>
            <value>true</value>
        </property>
    </configuration>
  2. Синхронизируйте конфигурацию между хостами кластера Greengage DB:

    $ pxf cluster sync

    Вывод должен выглядеть следующим образом:

    Syncing PXF configuration files from coordinator host to standby coordinator host and 2 segment hosts...
    PXF configs synced successfully on 3 out of 3 hosts
  3. Выполните команду CREATE EXTERNAL TABLE. В выражении LOCATION укажите имя и местоположение файла orders.csv, а также следующие параметры:

    • PROFILE=s3:csv — профиль PXF, используемый для чтения однострочных данных CSV с разделителями;

    • SERVER=example-s3 — имя созданной ранее конфигурации сервера;

    • SKIP_HEADER_COUNT=1 — количество строк заголовка, которые необходимо пропустить.

    В выражении FORMAT укажите CSV в качестве формата данных:

    CREATE EXTERNAL TABLE orders_s3(
        id INTEGER,
        name VARCHAR,
        price NUMERIC    
    )
    LOCATION ('pxf://customers/orders.csv?PROFILE=s3:csv&SERVER=example-s3&SKIP_HEADER_COUNT=1')
    FORMAT 'CSV';
  4. Выполните запрос к созданной таблице:

    SELECT * FROM orders_s3;

    Вывод должен выглядеть следующим образом:

     id |    name    | price
    ----+------------+--------
      1 | Laptop     | 999.99
      2 | Smartphone | 499.99
      3 | Tablet     | 299.99
      4 | Monitor    | 599.99
      5 | Keyboard   |  99.99