HDFS#
CedrusData поддерживает работу с файловой системой HDFS.
Для интеграции с HDFS вам необходимо получить требуемые для подключения файлы (файлы конфигурации, файлы Kerberos),
и положить их в директорию ресурсов каталога, задаваемую параметром конфигурации resource-dir
.
Обычно это директория <data-dir>/resource
при запуске из распакованного архива,
и /data/catalog/resource
при запуске из Docker-образа.
Аутентификация#
Интеграция с HDFS по умолчанию выполняет операции от имени пользователя, запустившего процесс CedrusData Catalog. Вы можете включить имперсонацию, чтобы работа с файловой системой происходила от имени пользователя каталога, запустившего текущую операцию каталога.
В обоих режимах работы (с и без имперсонации) вы можете использовать аутентификацию через Kerberos.
Конфигурация#
Параметр |
Описание |
---|---|
|
Список файлов конфигурации HDFS (например, core-site.xml, hdfs-site.xml), перечисленных через запятую. Файлы конфигурации могут содержать внутри пути к другим файлам. Если такие пути присутствуют, вам необходимо убедиться, что процесс каталога имеет доступ на чтение этих файлов. |
|
Включает или отключает имперсонацию. Значение по умолчанию: |
|
Principal, который будет использован для аутентификации через Kerberos.
Если имперсонация отключена, все операции над файловой системой будут выполнены от имени principal.
Если имперсонация включена, HDFS клиент сначала осуществит аутентификацию от имени principal,
но операции над файловой системой будут совершены от имени пользователя каталога.
Если параметр |
|
Путь к keytab относительно |
|
Путь к Kerberos credential cache относительно |
Пример интеграции с HDFS#
В данном примере мы развернем HDFS и настроим подключение к нему из CedrusData Catalog.
Мы будем использовать специальный Docker-образ Hadoop,
который является частью тестовой инфраструктуры Trino. Данный образ запускает внутри себя множество сервисов Hadoop, в том числе HDFS.
Скачивание образа может занять некоторое время.
Убедитесь, что у вас установлен Docker Server, и команда
docker
не требуетsudo
Создайте сеть Docker, которая будет использована CedrusData Catalog и HDFS:
docker network create example-network
Запустите Docker-контейнер Hadoop. Контейнер обязательно должен иметь имя
hadoop-master
:docker run -d \ --name hadoop-master \ --network example-network \ ghcr.io/trinodb/testing/hdp3.1-hive:100
Создайте пустой файл в HDFS. В дальнейшем мы попытаемся получить его статус с помощью каталога для проверки работоспособности интеграции:
docker exec -it hadoop-master bin/hdfs dfs -touch hdfs://hadoop-master:9000/user/hive/warehouse/test.file
Создайте директорию
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/
Запустите 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
Создайте файловую систему 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
Убедитесь, что каталог может получить статус объекта с помощью команды 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 | +--------+
(при необходимости) Остановите контейнеры и удалите ненужные ресурсы:
docker rm -f example-catalog docker rm -f hadoop-master docker network rm example-network rm -rf data