Подключение из CedrusData#

CedrusData — это высокопроизводительная система для обработки больших данных на основе open-source проекта Trino.

Подключение к CedrusData Catalog из CedrusData происходит с помощью коннектора Iceberg.

CedrusData может взаимодействовать с CedrusData Catalog через нативный протокол или через Iceberg REST протокол. Мы рекомендуем использовать нативный протокол, так как он обеспечивает более высокую производительность и поддерживает материализованные представления.

Примечание

При работе через нативный протокол возможен запуск CedrusData Catalog в embedded режиме. В этом случае CedrusData и CedrusData Catalog работают в рамках одного процесса. Это упрощает развертывание и повышает производительность.

Данный документ описывает процесс подключения к CedrusData Catalog из CedrusData через нативный протокол.

Подключение к CedrusData Catalog из CedrusData через Iceberg REST протокол идентично подключению из Trino.

Подготовка#

  1. Убедитесь, что CedrusData Catalog содержит хотя бы один Iceberg каталог

  2. Получите постоянный или временный токен доступа CedrusData Catalog

Конфигурация CedrusData#

Сконфигурируйте в CedrusData подключение к CedrusData Catalog согласно инструкциям. Для это в файле конфигурации etc/config.properties укажите следующие параметры:

cedrusdata-catalog.mode=remote
cedrusdata-catalog.access-token=<токен_доступа_CedrusData_Catalog>
cedrusdata-catalog.remote.uri=<адрес_CedrusData_Catalog>

В конфигурации вашего Iceberg каталога укажите следующие параметры:

iceberg.catalog.type=cedrusdata_catalog
iceberg.cedrusdata-catalog.catalog-name=<имя_каталога_Iceberg_в_CedrusData_Catalog>

Где:

  • <адрес_CedrusData_Сatalog> — адрес, по которому доступен CedrusData Catalog (http(s)://host[:port])

  • <токен_доступа_CedrusData_Catalog> — токен доступа CedrusData Catalog: постоянный токен доступа для типа аутентификации credential; постоянный иди временный токен доступа для типа аутентификации token

  • <имя_каталога_Iceberg_в_CedrusData_Catalog> — имя объекта Iceberg catalog, зарегистрированного в CedrusData Catalog

Кроме этого, в конфигурации Iceberg каталога вы должны задать конфигурацию файловой системы для доступа к файловой системе. В конце документа приведен пример полной конфигурации для доступа к S3-совместимой файловой системе.

Пример#

Инструкции ниже описывают, как интегрировать локальный экземпляр CedrusData с CedrusData Catalog.

  1. Создайте файловую систему CedrusData Catalog на основе MinIO согласно инструкциям. Не останавливайте Docker-контейнеры.

  2. Создайте Iceberg каталог с именем ice_prod в CedrusData Catalog:

    docker exec -it example-catalog catalog iceberg catalog create \
      --catalog-name ice_prod \
      --file-system-name minio \
      --file-system-location s3://ice-bucket
    
  3. Создайте файл config.properties, в котором укажите параметры подключения к CedrusData Catalog из CedrusData:

    coordinator=true
    node-scheduler.include-coordinator=true
    http-server.http.port=8080
    discovery.uri=http://localhost:8080
    catalog.management=${ENV:CATALOG_MANAGEMENT}
    
    cedrusdata-catalog.mode=remote
    cedrusdata-catalog.access-token=${ENV:CATALOG_ACCESS_TOKEN}
    cedrusdata-catalog.remote.uri=http://example-catalog:9080/   
    
  4. Запустите Docker-контейнер CedrusData. Мы передадим ключи MinIO и токен доступа CedrusData Catalog в качестве переменных окружения, чтобы нам не писать их в явном виде в дальнейшем. Мы также заменим файл конфигурации /etc/trino/config.properties в контейнере CedrusData, чтобы передать параметры подключения к CedrusData Catalog.

    CATALOG_ACCESS_TOKEN=$(docker exec example-catalog cat /data/catalog/catalog-admin-access-token) && \
    docker run -d \
      --name example-cedrusdata \
      --network=example-network \
      -e CATALOG_MANAGEMENT=cedrusdata_dynamic \
      -e CATALOG_ACCESS_TOKEN=$CATALOG_ACCESS_TOKEN \
      -e MINIO_ACCESS_KEY=accesskey \
      -e MINIO_SECRET_KEY=secretkey \
      -p 8080:8080 \
      -v ${PWD}/config.properties:/etc/trino/config.properties \
      cr.yandex/crpjtvqf29mpabhmrf1s/cedrusdata:458-4
    
  5. Откройте SQL-редактор CedrusData по адресу http://localhost:8080/cedrus-ui. В окне авторизации задайте имя пользователя alice.

  6. Создайте новый каталог ice:

    CREATE CATALOG ice USING iceberg 
    WITH (
      "iceberg.catalog.type" = 'CEDRUSDATA_CATALOG',
      "iceberg.cedrusdata-catalog.catalog-name" = 'ice_prod',
      "fs.hadoop.enabled" = 'false',
      "fs.native-s3.enabled" = 'true',
      "s3.endpoint" = 'http://example-minio:9000',
      "s3.region" = 'us-east-1',
      "s3.path-style-access" = 'true',
      "s3.aws-access-key" = '${ENV:MINIO_ACCESS_KEY}',
      "s3.aws-secret-key" = '${ENV:MINIO_SECRET_KEY}'    
    );
    
  7. Попробуйте отобразить список схем. CedrusData вернет ошибку, так как мы включили имперсонацию (iceberg.rest-catalog.session=user), но пользователь alice не зарегистрирован в CedrusData Catalog:

    SHOW SCHEMAS IN ice;
    
    Error listing schemas for catalog ice: Malformed request: unauthorized_client: Authentication failed
    
  8. Создайте пользователя alice в CedrusData Catalog и предоставьте ему роль builtin.iceberg.admin:

    docker exec -it example-catalog catalog principal create \
      --principal-name alice
    
    docker exec -it example-catalog catalog role grant \
      --principal-name alice \
      --role-name builtin.iceberg.admin
    
  9. Пользователь alice теперь имеет необходимые права доступа. Выполните ряд команд SQL:

    CREATE SCHEMA IF NOT EXISTS ice.hr;
    DROP TABLE IF EXISTS ice.hr.employee;
    CREATE TABLE ice.hr.employee(id BIGINT, name VARCHAR(100));
    INSERT INTO ice.hr.employee VALUES (1, 'John');
    SELECT * FROM ice.hr.employee;
    
  10. Пройдите в консоль MinIO http://localhost:9001 (имя пользователя accesskey, пароль secretkey), и ознакомьтесь с созданными файлам Iceberg в директории ice-bucket/hr/employee.

  11. Получите список таблиц Iceberg через утилиту командной строки CedrusData Catalog:

    docker exec -it example-catalog catalog iceberg object list
    
  12. (при необходимости) Остановите контейнер CedrusData:

    docker rm -f example-cedrusdata
    

    Очистите остальные ресурсы, следуя последнему шагу инструкции.