Миграция#

Данный документ описывает способы миграции на CedrusData Catalog с других продуктов (например, Hive Metastore).

Миграция с помощью Iceberg Catalog Migrator#

Iceberg Catalog Migrator — это утилита командной строки с открытым исходным кодом для миграции таблиц Apache Iceberg между каталогами различных типов.

Iceberg Catalog Migrator поддерживает миграцию с каталогов Hive Metastore, REST, JDBC, Hadoop, Nessie, и других.

Примечание

Iceberg Catalog Migrator поддерживает миграцию объектов Iceberg namespace и table, но не поддерживает миграцию view.

Рекомендуем ознакомиться с документацией Iceberg Catalog Migrator перед началом работы.

Подготовка#

  1. Убедитесь, что у вас установлена Java 21 (или более поздняя версия)

  2. Скачайте Iceberg Catalog Migrator по ссылке и проверьте его работоспособность:

    java -jar iceberg-catalog-migrator-cli-0.3.0.jar --version
    
  3. Убедитесь, что каталог, с которого будет происходить миграция доступен по сети с текущего компьютера

  4. Убедитесь, что CedrusData Catalog запущен и доступен по сети с текущего компьютера

  5. Определите, в какой логический каталог CedrusData Catalog будет происходить миграция. Если логического каталога еще нет, создайте его с помощью команды iceberg catalog create

  6. Убедитесь, что у вас есть постоянный токен доступа, владелец которого имеет права работы с объектами Iceberg

  7. Убедитесь, что каталог-источник и каталог-приемник настроены на работу с одной и той же файловой системой

Миграция#

  1. Выберите стратегию миграции: register — новые таблицы будет созданы в CedrusData Catalog; migrate — новые таблицы будет созданы в CedrusData Catalog и удалены в каталоге-источнике. Мы рекомендуем использовать стратегию register

  2. Определите список таблиц, подлежащих миграции. Для этого создайте файл, в котором будут перечислены имена таблиц в формате namespace.table, по одной таблице на каждую строку. Вы также можете получить список всех объектов, запустив Iceberg Catalog Migrator с опцией --dry-run (см. инструкции ниже). В результате в текущей директории будет создан файл dry_run_identifiers.txt, содержащий имена всех таблиц. Отредактируйте при необходимости данный файл, оставив только те таблицы, которые нужно мигрировать

  3. Запустите процесс миграции с помощью следующей команды:

    java -jar iceberg-catalog-migrator-cli-0.3.0.jar register \
      --source-catalog-type <тип_каталога_источника> \
      --source-catalog-properties <свойства_каталога_источника> \
      --target-catalog-type REST \
      --target-catalog-properties uri=<сетевой_адрес_CedrusData_Catalog>/catalog/iceberg,ref=main,warehouse=<имя_логического_каталога>,credential=<постоянный_токен_доступа> \
      --identifiers-from-file=<путь_к_файлу_с_идентификаторами_таблиц> \
      --disable-safety-prompts \
      --stacktrace
    
  4. Ознакомьтесь с результатами работы команды. Если в консоли напечатано сообщение об успешной миграции, значит все таблицы успешно мигрированы в CedrusData Catalog. Если миграция не удалась, будет отображено сообщение об ошибке. Если произошла частичная миграция, будут созданы файлы failed_identifiers.txt и failed_to_delete_at_source.txt, содержащие список объектов, которые не удалось мигрировать

Пример миграции с Hive Metastore#

Ниже приведен пример команды для миграции таблиц в S3 с Hive Metastore в CedrusData Catalog.

В качестве свойств каталога-источника необходимо указать следующие параметры:

  • uri — адрес Hive Metastore в формате thrift://<host>:<port>

  • io-impl — реализация файловой системы. В данном примере мы предполагаем, что данные хранятся в S3, поэтому значение параметра должно быть org.apache.iceberg.aws.s3.S3FileIO

  • s3.endpoint — путь к S3. Например: https://s3.yandexcloud.net или http://minio:9000

  • s3.access-key-id и s3.secret-access-key — статические ключи доступа к S3

  • s3.path-style-access — использовать ли path-style режим формирования URL файлов S3. В большинстве случаев данный параметр должен иметь значение true

  • client.region — регион S3. Например: us-east-1, ru-central1-a

Пример команды для формирования списка мигрируемых таблиц с помощью опции --dry-run. В результате работы команды будет создан файл dry_run_identifiers.txt со списком таблиц:

java -jar iceberg-catalog-migrator-cli-0.3.0.jar register \
  --source-catalog-type HIVE \
  --source-catalog-properties uri=thrift://hms_host:9083,io-impl=org.apache.iceberg.aws.s3.S3FileIO,s3.endpoint=https://minio:9000,s3.access-key-id=<s3_access_key>,s3.secret-access-key=<s3_secret_key>,s3.path-style-access=true,client.region=us-east-1 \
  --target-catalog-type REST \
  --target-catalog-properties uri=http://cedrusdata_catalog_host:9080/catalog/iceberg,ref=main,warehouse=my_catalog,credential=<постоянный_токен_доступа> \
  --dry-run \
  --stacktrace

Пример команды для миграции таблиц Hive Metastore, указанных в файле dry_run_identifiers.txt в CedrusData Catalog:

java -jar iceberg-catalog-migrator-cli-0.3.0.jar register \
  --source-catalog-type HIVE \
  --source-catalog-properties uri=thrift://hms_host:9083,io-impl=org.apache.iceberg.aws.s3.S3FileIO,s3.endpoint=https://minio:9000,s3.access-key-id=<s3_access_key>,s3.secret-access-key=<s3_secret_key>,s3.path-style-access=true,client.region=us-east-1 \
  --target-catalog-type REST \
  --target-catalog-properties uri=http://cedrusdata_catalog_host:9080/catalog/iceberg,ref=main,warehouse=my_catalog,credential=<постоянный_токен_доступа> \  
  --identifiers-from-file=dry_run_identifiers.txt \
  --disable-safety-prompts \
  --stacktrace