HDFS#

CedrusData поддерживает работу с файловой системой HDFS.

Для интеграции с HDFS вам необходимо получить требуемые для подключения файлы (файлы конфигурации, файлы Kerberos), и положить их в директорию ресурсов каталога, задаваемую параметром конфигурации resource-dir. Обычно это директория <data-dir>/resource при запуске из распакованного архива, и /data/catalog/resource при запуске из Docker-образа.

Аутентификация#

Интеграция с HDFS по умолчанию выполняет операции от имени пользователя, запустившего процесс CedrusData Catalog. Вы можете включить имперсонацию, чтобы работа с файловой системой происходила от имени пользователя каталога, запустившего текущую операцию каталога.

В обоих режимах работы (с и без имперсонации) вы можете использовать аутентификацию через Kerberos.

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

Параметр

Описание

config-resources

Список файлов конфигурации HDFS (например, core-site.xml, hdfs-site.xml), перечисленных через запятую. Файлы конфигурации могут содержать внутри пути к другим файлам. Если такие пути присутствуют, вам необходимо убедиться, что процесс каталога имеет доступ на чтение этих файлов.

impersonation-enabled

Включает или отключает имперсонацию. Значение по умолчанию: false.

kerberos-principal

Principal, который будет использован для аутентификации через Kerberos. Если имперсонация отключена, все операции над файловой системой будут выполнены от имени principal. Если имперсонация включена, HDFS клиент сначала осуществит аутентификацию от имени principal, но операции над файловой системой будут совершены от имени пользователя каталога. Если параметр kerberos-principal задан, вы также должны обязательно указать kerberos-keytab или kerberos-credential-cache-location. Если параметр kerberos-principal не задан, Kerberos не будет использован для аутентификации.

kerberos-keytab

Путь к keytab относительно resource-dir каталога. Не может быть задан одновременно с kerberos-credential-cache-location.

kerberos-credential-cache-location

Путь к Kerberos credential cache относительно resource-dir каталога. Не может быть задан одновременно с kerberos-keytab.

Пример интеграции с HDFS#

В данном примере мы развернем HDFS и настроим подключение к нему из CedrusData Catalog.
Мы будем использовать специальный Docker-образ Hadoop, который является частью тестовой инфраструктуры Trino. Данный образ запускает внутри себя множество сервисов Hadoop, в том числе HDFS. Скачивание образа может занять некоторое время.

  1. Убедитесь, что у вас установлен Docker Server, и команда docker не требует sudo

  2. Создайте сеть Docker, которая будет использована CedrusData Catalog и HDFS:

    docker network create example-network
    
  3. Запустите Docker-контейнер Hadoop. Контейнер обязательно должен иметь имя hadoop-master:

    docker run -d \
      --name hadoop-master \
      --network example-network \
      ghcr.io/trinodb/testing/hdp3.1-hive:100
    
  4. Создайте пустой файл в HDFS. В дальнейшем мы попытаемся получить его статус с помощью каталога для проверки работоспособности интеграции:

    docker exec -it hadoop-master bin/hdfs dfs -touch hdfs://hadoop-master:9000/user/hive/warehouse/test.file
    
  5. Создайте директорию data/resource/myhdfs, и перенесите в нее файлы конфигурации HDFS из образа:

    mkdir -p data/resource/myhdfs && \
    docker cp hadoop-master:/etc/hadoop/conf/core-site.xml data/resource/myhdfs/ && \
    docker cp hadoop-master:/etc/hadoop/conf/hdfs-site.xml data/resource/myhdfs/
    
  6. Запустите Docker-контейнер CedrusData Catalog, осуществив mount директории data на директорию контейнера /data/catalog. Таким образом файлы конфигурации HDFS станут доступны контейнеру CedrusData Catalog в директории /data/catalog/resource/myhdfs:

    docker run -d \
      --name example-catalog \
      --network=example-network \
      -v $PWD/data:/data/catalog \
      cr.yandex/crpjtvqf29mpabhmrf1s/cedrusdata-catalog:458-1
    
  7. Создайте файловую систему HDFS. Единственным обязательным параметром является config-resources, в котором мы должны перечислить пути к файлам конфигурации HDFS. Разрешение путей происходит относительно resource-dir каталога, который при запуске контейнера по умолчанию установлен в /data/catalog/resource. Мы будем ссылаться на конкретный файл конфигурации HDFS по пути myhdfs/<имя_файла>, который будет разрешен в /data/catalog/resource/myhdfs/<имя_файла>. Данный файл, в свою очередь, является файлом $PWD/data/resource/myhdfs/<имя_файла> на хосте:

    docker exec -it example-catalog catalog file-system create \
      --file-system-name myhdfs \
      --type hdfs \
      -p config-resources=myhdfs/hdfs-site.xml,myhdfs/core-site.xml
    
  8. Убедитесь, что каталог может получить статус объекта с помощью команды file-system check:

    docker exec -it example-catalog catalog file-system check \
      --file-system-name myhdfs \
      --location hdfs://hadoop-master:9000/user/hive/warehouse/test.file
    
    +--------+
    | exists |
    +--------+
    | true   |
    +--------+
    
  9. (при необходимости) Остановите контейнеры и удалите ненужные ресурсы:

    docker rm -f example-catalog
    docker rm -f hadoop-master
    docker network rm example-network
    rm -rf data