2022-11-23

Интеграция CedrusData c S3 на примере MinIO

MinIO это S3-совместимый object storage, который удобно использовать при тестировании и изучении работы CedrusData и Trino с озерами данных в S3. В данной статье приведена пошаговая инструкция по развертыванию MinIO на локальном компьютере и его интеграции с CedrusData.

Введение

MinIO это S3-совместимый object storage, который удобно использовать при тестировании и изучении работы CedrusData и Trino с озерами данных в S3.

В данной статье приведена пошаговая инструкция по развертыванию MinIO на локальном компьютере и его интеграции с CedrusData. Мы запустим MinIO в standalone режиме, настроим Hive Metastore и CedrusData для работы с S3 API, после чего выполним SQL-запросы из CedrusData к данным в MinIO.

Процесс развертывания занимает порядка 10-15 минут.

Данная инструкция так же доступна в документации CedrusData.

Что такое S3 API

В 2006 году компания Amazon запустила продукт Amazon S3, представляющий собой объектное хранилище (object storage) в облаке AWS. Пользовательские приложения работают с Amazon S3 через S3 REST API - набор команд, которые можно отправить через протокол HTTP.

Со временем конкуренты выпустили ряд собственных объектных хранилищ, которые так же поддерживают S3 REST API. Такимо бразом, S3 REST API де-факто является стандартным интерфейсом для работы с объектными хранилищами.

Для упрощения работы с S3-совместимыми объектными хранилищами был написан набор вспомогательных библиотек. Так, для выполнения операций над хранилищем из Java можно использовать библиотеку AWS Java SDK For Amazon S3, а для представления объектного хранилища в качестве файловой системы в экосистеме Hadoop была разработана файловая система S3AFileSystem.

Что такое MinIO

MinIO это популярное высокопроизводительное S3-совместимое объектное хранилище, которое может быть развернуто on-premise.

Возможность запуска on-premise позволяет использовать MinIO для тестирования и интеграции продуктов, работающих с S3 API.

Целевая конфигурация

Наш пример состоит из следующих компонентов:

  • Экземпляр MinIO, который хранит данные в локальной файловой системе.
  • Экземпляр Hive Metastore, который хранит метаданные в Postgres, и работает с данными MinIO через S3 API.
  • Узел CedrusData, который настроен на работу с указанными выше экземплярами MinIO и Hive Metastore.

Развертывание MinIO

Инструкции ниже приведены для операционных систем Ubuntu/Debian с использованием сетевых портов по умолчанию. Адаптируйте инструкции, если вы используете другую операционную систему, или если у вас возникает конфликт портов.

Шаг 1. Создайте локальную директорию, в которой будут храниться данные MinIO. Владельцем директории должен быть пользователь, от имени которого будет запущен MinIO. В данном примере мы создаем директорию `/home/minio` и меняем владельца на текущего пользователя.


sudo mkdir /home/minio && \
sudo chown $USER /home/minio

Шаг 2. Скачайте сервер MinIO и установите executable флаг:


wget http://dl.min.io/server/minio/release/linux-amd64/minio && \
chmod +x minio

Шаг 3. Запустите сервер MinIO. Сервер будет доступен на порту `9000`. Поменяйте порт при необходимости. В команде ниже мы задаем имя и пароль root пользователя, которые будут в дальнейшем использованы как access key и secret key, соответственно. При промышленном использовании MinIO, имя и пароль root пользователя обычно используются администраторами, а конечные пользователи получают индивидуальные ключи с необходимым уровнем доступа.


MINIO_ROOT_USER=accesskey MINIO_ROOT_PASSWORD=secretkey ./minio server /home/minio --address ":9000" --console-address ":9001"

Шаг 4. Скачайте клиент MinIO и настройте его для работы с запущенным сервером:


wget https://dl.min.io/client/mc/release/linux-amd64/mc && \
chmod +x mc && \
./mc alias set myminio http://localhost:9000 accesskey secretkey

Шаг 5. Создайте в MinIO bucket с именем `mybucket`:


./mc mb myminio/mybucket

Шаг 6. Убедитесь, что в директории `/home/minio` появилась директория `mybucket`:


ls -R /home/minio

Процесс развертывания MinIO завершен.

Конфигурация Hive Metastore

Для выполнения дальнейших шагов необходимо развернуть Hive Metastore и CedrusData согласно инструкции Развертывание Hive Metastore.

Что бы Hive Metastore мог работать с S3 API, необходимо добавить ряд библиотек и предоставить конфигурацию файловой системы `S3AFileSystem`.

Шаг 1. Добавьте в Hive Metastore библиотеки для работы с S3:


export HIVE_HOME=<директория дистрибутива Hive Metastore> && \
wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.3.4/hadoop-aws-3.3.4.jar -P $HIVE_HOME/lib && \
wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-core/1.12.336/aws-java-sdk-core-1.12.336.jar -P $HIVE_HOME/lib && \
wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-s3/1.12.336/aws-java-sdk-s3-1.12.336.jar -P $HIVE_HOME/lib && \
wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-dynamodb/1.12.336/aws-java-sdk-dynamodb-1.12.336.jar -P $HIVE_HOME/lib && \
wget https://repo1.maven.org/maven2/joda-time/joda-time/2.12.1/joda-time-2.12.1.jar -P $HIVE_HOME/lib

Шаг 2. В директории дистрибутива Hive Metastore добавьте следующее содержимое в файл `conf/metastore-site.xml`. В данном примере мы работаем с MinIO через протокол `http`. Это сделано для простоты. При промышленном использовании следует использовать протокол `https`.


<property>
    <name>fs.s3a.access.key</name>
    <value>accesskey</value>
</property>
<property>
    <name>fs.s3a.secret.key</name>
    <value>secretkey</value>
</property>
<property>
    <name>fs.s3a.endpoint</name>
    <value>http://localhost:9000</value>
</property>
<property>
    <name>fs.s3a.path.style.access</name>
    <value>true</value>
</property>

Шаг 3. Из директории дистрибутива Hive Metastore перезапустите Hive Metastore. Убедитесь, что переменные окружения `JAVA_HOME` и `HADOOP_HOME` заданы.


export JAVA_HOME=<директория установки JDK> && \
export HADOOP_HOME=<директория дистрибутива Hadoop> && \
bin/start-metastore

Процесс конфигурации Hive Metastore завершен.

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

Что бы CedrusData мог работать с S3 API, необходимо добавить параметры S3 в конфигурацию Hive коннектора.

Шаг 1. В директории дистрибутива CedrusData добавьте следующее содержимое в файл `etc/catalog/hive.properties`. В данном примере мы работаем с MinIO через протокол `http`. Это сделано для простоты. В реальных сценариях следует использовать протокол `https`.


hive.s3.aws-access-key=accesskey
hive.s3.aws-secret-key=secretkey
hive.s3.endpoint=http://localhost:9000
hive.s3.ssl.enabled=false
hive.s3.path-style-access=true

Шаг 2. Из директории дистрибутива CedrusData перезапустите узел:


bin/launcher restart

Процесс конфигурации CedrusData завершен.

Проверка работы MinIO с CedrusData

На данном этапе у вас должны быть запущенны MinIO, Hive Metastore и узел CedrusData.

Шаг 1. Из директории дистрибутива CedrusData выполните следующие команды, что бы создать таблицу `call_center`, и  наполнить ее данными в формате Parquet:


bin/trino --execute "create schema hive.minio with (location = 's3a://mybucket/myschema')" && \
bin/trino --execute "create table hive.minio.call_center as select * from tpcds.sf1.call_center;"

Шаг 2. Убедитесь, что в директории `/home/minio` появились новые директории и файлы:


ls -R /home/minio

Шаг 3. Из директории дистрибутива CedrusData выполните следующую команду для чтения данных из таблицы `call_center`:


bin/trino --execute "select cc_call_center_id, cc_name from hive.minio.call_center"

Шаг 4. Из директории дистрибутива CedrusData выполните следующие команды для удаления таблицы и схемы:


bin/trino --execute "drop table hive.minio.call_center" && \
bin/trino --execute "drop schema hive.minio"

Шаг 5. Убедитесь, что соответствующие файлы и директории удалены из `/home/minio`:


ls -R /home/minio

Следующие шаги

В данной статье мы развернули экземпляр MinIO и настроили Hive Metastore и CedrusData для работы с S3-совместимым объектным хранилищем.

Вы можете продолжить знакомство с возможностями CedrusData по работе с озерами данных с помощью документации Hive коннектора и других руководств.

Мы так же рекомендуем вам ознакомиться с расширенными инструкциями по настройке безопасности MinIO и Trino.