Локальное развертывание Apache Iceberg с помощью CedrusData Catalog#

Данное руководство показывает, как можно быстро развернуть тестовое окружение для Apache Iceberg, где хранилищем выступает локальная файловая система, а каталогом — CedrusData Catalog, запущенный в embedded режиме.

  1. Создайте директорию, в которой будут находиться файлы Iceberg:

    mkdir -p data/iceberg
    
  2. Запустите Docker-образ CedrusData. В данной команде мы задаем переменную окружения CATALOG_MANAGEMENT=cedrusdata_dynamic, чтобы создавать каталоги динамически. Мы также задаем переменную окружения CEDRUSDATA_CATALOG_COORDINATOR_MODE=embedded, чтобы запустить CedrusData Catalog в embedded режиме. Наконец, мы сопоставляем директорию контейнера /data/trino директории хоста data. Таким образом, записанные контейнером файлы Iceberg будут доступны на хосте.

    docker run -d --name example-cedrusdata \
      -e CATALOG_MANAGEMENT=cedrusdata_dynamic \
      -e CEDRUSDATA_CATALOG_COORDINATOR_MODE=embedded \
      -p 8080:8080 \
      -v ${PWD}/data:/data/trino \
      cr.yandex/crpjtvqf29mpabhmrf1s/cedrusdata:458-4
    

    В процессе запуска CedrusData, контейнер также запустит CedrusData Catalog. В CedrusData Catalog будет автоматически создан логический каталог local, который работает с файловой системой, разрешая пути относительно директории data/iceberg. Данное поведение детально разъяснено в документации embedded-режима CedrusData Catalog.

  3. Откройте web-интерфейс CedrusData по адресу http://localhost:8080/cedrus-ui, и введите произвольное имя пользователя.

  4. Создайте каталог Iceberg, который будет работать со встроенным CedrusData Catalog и локальной файловой системой:

    CREATE CATALOG ice USING iceberg 
    WITH (
      "iceberg.catalog.type" = 'CEDRUSDATA_CATALOG',
      "iceberg.cedrusdata-catalog.catalog-name" = 'local',
      "cedrusdata.fs.native-local.enabled" = 'true',
      "cedrusdata.local.root-path" = 'iceberg'
    );
    
  5. Создайте тестовую таблицу Iceberg и наполните ее данными. После этого проанализируйте содержимое директории data/iceberg.

    CREATE SCHEMA IF NOT EXISTS ice.my_schema;
    CREATE TABLE IF NOT EXISTS ice.my_schema.my_table(c1 int, c2 VARCHAR);
    INSERT INTO ice.my_schema.my_table VALUES (1, 'Hello, Iceberg!');
    SELECT * FROM ice.my_schema.my_table;