Apache Hudi +MinIO + HMS создают современное озеро данных
Apache Hudi +MinIO + HMS создают современное озеро данных
Apache Hudi Стал управлять современным озером данныеиз Один из ведущих форматов открытых таблиц, прямой существования современного озера Основные функции хранилища и библиотеки данных предоставляются в data. Такое существование во многом обусловлено Hudi Предусмотрены расширенные функции,Например таблица、дела、обновить вставить/удалить、Расширенное индексирование、Прием потоковой передачи Служить、оптимизация кластера/сжатия данных и управление параллелизмом.

Мы изучили [1], как MinIO и Hudi работают вместе для создания современного озера данных. Целью этой публикации в блоге является развитие этих знаний и предоставление альтернативной реализации Hudi и MinIO, использующей службу Hive Metastore Service (HMS[2]). Отчасти из-за истории происхождения экосистемы Hadoop многие крупномасштабные реализации данных Hudi до сих пор используют HMS. Часто истории миграции из устаревших систем связаны с некоторой степенью гибридности, поскольку успех достигается за счет использования лучших из всех задействованных продуктов.

Hudi и MinIO: выигрышная комбинация

Эволюция Hudi от использования HDFS к облачному объектному хранилищу, такому как MinIO, идеально согласуется с отходом индустрии данных от монолитных и неподходящих устаревших решений. Производительность[3], масштабируемость[4] и экономичность[5] MinIO делают его идеальным для хранения и управления данными Hudi. Кроме того, оптимизации Hudi для Apache Spark, Flink, Presto, Trino, StarRocks и других современных данных легко интегрируются с MinIO для обеспечения производительности в облаке в любом масштабе. Эта совместимость представляет собой важную закономерность в современной архитектуре озера данных.

Интеграция HMS: улучшенное управление данными

Хотя Hudi предоставляет основные возможности управления данными «из коробки», интеграция с HMS добавляет еще один уровень контроля и видимости. Вот как интеграция HMS дает преимущества крупномасштабному развертыванию Hudi:

  • Улучшенное управление данными:HMS Источник концентрацииданныеуправлять,существоватьвесьозеро Обеспечьте постоянный контроль доступа и отслеживание данных. и аудит родословной. Это обеспечивает качество данных、соблюдение требований и оптимизация процессов управления.
  • Упрощенное управление архитектурой:существовать HMS определены и реализованы в Hudi Таблица из схемы для обеспечения согласованности и совместимости между конвейерами, приложениями и зданиями. ГМС Функция эволюции шаблона позволяет существованию адаптироваться к изменению изданных структур, не повреждая трубопровод из.
  • Улучшенная видимость и возможность обнаружения:HMS для всех информационных активов, включая Hudi table) предоставляет центральный каталог. Это помогает аналитикам и данным ученым легко находить и исследовать данные.

Начало работы: соответствие предварительным требованиям

Для завершения этого руководства вам потребуется настроить некоторое программное обеспечение. Вот подробности:

  • • Docker Engine: этот мощный инструмент позволяет упаковывать и запускать приложения в стандартизированных единицах программного обеспечения, называемых контейнерами.
  • • Docker Составление: выступает в качестве координатора для упрощения иурегулирования многоконтейнерных приложений. Это помогает легко определять и запускать сложные приложения.

Установка. Установщик Docker Desktop предоставляет удобное универсальное решение для установки Docker и Docker Compose на определенной платформе (Windows, macOS или Linux). Обычно это проще, чем загружать и устанавливать их по отдельности. После установки Docker Desktop или комбинации Docker и Docker Compose вы можете проверить их наличие, выполнив в терминале следующую команду:

Язык кода:javascript
копировать
docker-compose --version

Обратите внимание, что это руководство создано для Linux/amd64, и для его работы с чипом Mac M2 также необходимо установить Rosetta 2. Вы можете сделать это в окне терминала, выполнив следующую команду:

Язык кода:javascript
копировать
softwareupdate --install-rosetta

Rosetta также необходимо включить двоичную эмуляцию x86_64/amd64 на Apple Silicone в настройках Docker Desktop. Для этого перейдите в «Настройки» → «Основные» и установите флажок Rosetta, как показано ниже.

Интеграция HMS и Hudi на MinIO

В этом руководстве используется демонстрационный репозиторий StarRocks. Клонируйте репозиторий, найденный здесь [6]. В окне терминала перейдите в каталог document-samples, затем перейдите в папку hudi и выполните следующую команду:

Язык кода:javascript
копировать
docker compose up

После выполнения приведенной выше команды вы должны увидеть работающие StarRocks, HMS и MinIO. Получите доступ к консоли MinIO через http://localhost:9000/ и войдите в систему, используя учетные данные admin:пароль. Вы увидите, что хранилище сегментов хранилища было создано автоматически.

Вставка данных с помощью Spark Scala

Выполните следующую команду, чтобы получить доступ к оболочке внутри контейнера spark-hudi:

Язык кода:javascript
копировать
docker exec -it hudi-spark-hudi-1 /bin/bash

Затем выполнение следующей команды приведет к входу в Spark REPL:

Язык кода:javascript
копировать
/spark-3.2.1-bin-hadoop3.2/bin/spark-shell

После входа в оболочку выполните следующие строки Scala, чтобы создать базу данных, таблицу и вставить данные в таблицу:

Язык кода:javascript
копировать
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
import org.apache.spark.sql.SaveMode._
import org.apache.hudi.DataSourceReadOptions._
import org.apache.hudi.DataSourceWriteOptions._
import org.apache.hudi.config.HoodieWriteConfig._
import scala.collection.JavaConversions._

val schema = StructType(Array(
  StructField("language", StringType, true),
  StructField("users", StringType, true),
  StructField("id", StringType, true)
))

val rowData= Seq(
  Row("Java", "20000", "a"),
  Row("Python", "100000", "b"),
  Row("Scala", "3000", "c")
)

val df = spark.createDataFrame(rowData, schema)

val databaseName = "hudi_sample"
val tableName = "hudi_coders_hive"
val basePath = "s3a://warehouse/hudi_coders"

df.write.format("hudi").
option(org.apache.hudi.config.HoodieWriteConfig.TABLE_NAME, tableName).
option(RECORDKEY_FIELD_OPT_KEY, "id").
option(PARTITIONPATH_FIELD_OPT_KEY, "language").
option(PRECOMBINE_FIELD_OPT_KEY, "users").
option("hoodie.datasource.write.hive_style_partitioning", "true").
option("hoodie.datasource.hive_sync.enable", "true").
option("hoodie.datasource.hive_sync.mode", "hms").
option("hoodie.datasource.hive_sync.database", databaseName).
option("hoodie.datasource.hive_sync.table", tableName).
option("hoodie.datasource.hive_sync.partition_fields", "language").
option("hoodie.datasource.hive_sync.partition_extractor_class", "org.apache.hudi.hive.MultiPartKeysValueExtractor").
option("hoodie.datasource.hive_sync.metastore.uris", "thrift://hive-metastore:9083").
mode(Overwrite).
save(basePath)

Озеро данных MinIO теперь настроено с использованием Hudi и HMS. Вернитесь по адресу http://localhost:9000/, чтобы увидеть заполненную папку репозитория.

Исследование данных

При желании вы можете использовать следующую Scala в той же оболочке для дальнейшего изучения данных.

Язык кода:javascript
копировать
val hudiDF = spark.read.format("hudi").load(basePath + "/*/*")

hudiDF.show()

val languageUserCount = hudiDF.groupBy("language").agg(sum("users").as("total_users"))
languageUserCount.show()

val uniqueLanguages = hudiDF.select("language").distinct()
uniqueLanguages.show()

// Stop the Spark session
System.exit(0)

Создайте современное облачное озеро данных

Hudi, MinIO и HMS работают вместе, обеспечивая комплексное решение для создания и управления современными озерами данных в любом масштабе. Интеграция этих технологий обеспечивает гибкость, масштабируемость и безопасность, необходимые для раскрытия всего потенциала ваших данных.

Справочная ссылка

[1] Уже исследовано: [https://blog.min.io/streaming-data-lakes-hudi-minio/?utm_term=&utm_campaign=&utm_source=adwords&utm_medium=ppc&hsa_acc=8976569894&hsa_cam=20466868543&hsa_grp=&hsa_ad=&hsa_src=x&hsa_tgt=&hsa_kw=&hsa_mt=&hsa_net=adwords&hsa_ver=3&gad_source=1&gclid=CjwKCAiA0PuuBhBsEiwAS7fsNQanvkO02hS9l_MY0HTiH2XjcPVJVDITKXq4ydcHFmDYUGrwgVH0WBoCXtEQAvD_BwE](https://blog.min.io/streaming-data-lakes-hudi-minio/?utm_term=&utm_campaign=&utm_source=adwords&utm_medium=ppc&hsa_acc=8976569894&hsa_cam=20466868543&hsa_grp=&hsa_ad=&hsa_src=x&hsa_tgt=&hsa_kw=&hsa_mt=&hsa_net=adwords&hsa_ver=3&gad_source=1&gclid=CjwKCAiA0PuuBhBsEiwAS7fsNQanvkO02hS9l_MY0HTiH2XjcPVJVDITKXq4ydcHFmDYUGrwgVH0WBoCXtEQAvD_BwE) [2] HMS: [https://hive.apache.org/?ref=blog.min.io](https://hive.apache.org/?ref=blog.min.io) [3] производительность: [https://blog.min.io/nvme_benchmark/](https://blog.min.io/nvme_benchmark/) [4] Масштабируемость: [https://min.io/product/scalable-object-storage?ref=blog.min.io](https://min.io/product/scalable-object-storage?ref=blog.min.io) [5] Экономическая эффективность: [https://blog.min.io/the-long-term-costs-of-storage-in-the-cloud/](https://blog.min.io/the-long-term-costs-of-storage-in-the-cloud/) [6] Здесь: [https://github.com/StarRocks/demo?ref=blog.min.io](https://github.com/StarRocks/demo?ref=blog.min.io)

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose