Введение
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.
fs.s3a.access.key
accesskey
fs.s3a.secret.key
secretkey
fs.s3a.endpoint
http://localhost:9000
Шаг 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.
