Развертывание MinIO для работы с данными через S3 API#
MinIO это S3-совместимый object storage, который удобно использовать при тестировании и изучении работы CedrusData и Trino с озерами данных в S3.
В данной статье приведена пошаговая инструкция по развертыванию MinIO на локальном компьютере и его интеграции с CedrusData. Мы запустим MinIO в standalone режиме, настроим Hive Metastore и CedrusData для работы с S3 API, после чего выполним SQL-запросы из CedrusData к данным в MinIO.
Процесс развертывания занимает порядка 10-15 минут.
Введение#
Что такое 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 с использованием сетевых портов по умолчанию. Адаптируйте инструкции, если вы используете другую операционную систему, или если у вас возникает конфликт портов.
Создайте локальную директорию, в которой будут храниться данные MinIO. Владельцем директории должен быть пользователь, от имени которого будет запущен MinIO. В данном примере мы создаем директорию
/home/minio
и меняем владельца на текущего пользователя.sudo mkdir /home/minio && \ sudo chown $USER /home/minio
Скачайте сервер MinIO и установите executable флаг:
wget http://dl.min.io/server/minio/release/linux-amd64/minio && \ chmod +x minio
Запустите сервер 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"
Скачайте клиент MinIO и настройте его для работы с запущенным сервером:
wget https://dl.min.io/client/mc/release/linux-amd64/mc && \ chmod +x mc && \ ./mc alias set myminio http://localhost:9000 accesskey secretkey
Создайте в MinIO bucket с именем
mybucket
:./mc mb myminio/mybucket
Убедитесь, что в директории
/home/minio
появилась директорияmybucket
:ls -R /home/minio
Процесс развертывания MinIO завершен.
Конфигурация Hive Metastore#
Для выполнения дальнейших шагов необходимо развернуть Hive Metastore и CedrusData согласно инструкции Развертывание Hive Metastore.
Что бы Hive Metastore мог работать с S3 API, необходимо добавить ряд библиотек и предоставить конфигурацию файловой
системы S3AFileSystem
.
Добавьте в 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
В директории дистрибутива 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>
Из директории дистрибутива 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 коннектора.
В директории дистрибутива CedrusData добавьте следующее содержимое в файл
etc/catalog/hive.properties
.Примечание
В данном примере мы отключаем SSL и работаем с 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
Из директории дистрибутива CedrusData перезапустите узел:
bin/launcher restart
Процесс конфигурации CedrusData завершен.
Проверка работы MinIO с CedrusData#
На данном этапе у вас должны быть запущенны MinIO, Hive Metastore и узел CedrusData.
Из директории дистрибутива 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;"
Убедитесь, что в директории
/home/minio
появились новые директории и файлы:ls -R /home/minio
Из директории дистрибутива CedrusData выполните следующую команду для чтения данных из таблицы
call_center
:bin/trino --execute "select cc_call_center_id, cc_name from hive.minio.call_center"
Из директории дистрибутива CedrusData выполните следующие команды для удаления таблицы и схемы:
bin/trino --execute "drop table hive.minio.call_center" && \ bin/trino --execute "drop schema hive.minio"
Убедитесь, что соответствующие файлы и директории удалены из
/home/minio
:ls -R /home/minio
Мы так же рекомендуем вам ознакомиться с расширенными инструкциями по настройке безопасности MinIO и Trino.