Welcome to my personal place for love, peace and happiness❣️

Распределённое хранилище данных с Bacalhau и DuckDB

Оригинал тут: https://blog.bacalhau.org/p/distributed-data-warehouse-with-bacalhau

Это часть 5-дневной серии о Bacalhau 1.7

День 1: Анонс Bacalhau 1.7.0: Расширение возможностей предприятий за счет улучшенной масштабируемости, управления заданиями и поддержки
День 2: Масштабирование вычислительных задач с помощью разделенных заданий Bacalhau
День 3: Упрощение безопасности: Облегчение модели аутентификации Bacalhau
День 4: Использование разделения AWS S3 с Bacalhau

Это пятая часть – Распределенное хранилище данных с Bacalhau и DuckDB

Во многих приложениях, полагающихся на хранилища данных, необходимо хранить источники данных в разных местах. Это может быть связано с соображениями конфиденциальности, нормативными требованиями или желанием обрабатывать данные ближе к источнику. Однако бывают случаи, когда необходимо проводить анализ этих источников данных из одного места, не перемещая данные.

В этой статье Bacalhau используется для организации распределенной обработки, а DuckDB предоставляет возможности SQL-хранения и запросов для некоторой фиктивной информации о продажах, расположенной в ЕС и США.

Предварительные требования

Для воспроизведения этого руководства вам понадобятся следующие компоненты:

  • Bacalhau CLI
  • Docker и Docker Compose
  • Пример многорегиональной настройки:
git clone https://github.com/bacalhau-project/examples.git

Архитектура

Пример файла Docker Compose и определения заданий Bacalhau в репозитории примеров имитируют следующую архитектуру:

  • Оркестратор Bacalhau:** Центральная панель управления для распределения заданий
  • Вычислительные узлы:** Распределены по регионам, работают близко к данным
  • Региональное хранилище:** Региональные хранилища данных, использующие MinIO в этой настройке
  • DuckDB:** Механизм SQL-запросов, работающий на каждом вычислительном узле. Bacalhau использует пользовательский образ, который добавляет несколько определяемых пользователем функций для помощи в разделении больших наборов данных между узлами на основе следующих методов:
    • `partition_by_hash`: Равномерное распределение файлов по разделам
    • `partition_by_regex`: Разделение на основе шаблонов
    • `partition_by_date`: Разделение на основе времени

Вы можете найти более подробную информацию о том, как работают эти функции, в документации по пользовательскому образу.
Вы можете увидеть настройку каждого компонента в файле Docker Compose. Создайте архитектуру, выполнив следующую команду:

docker compose up -d

Файл Docker Compose использует несколько файлов конфигурации Bacalhau, которые вы можете увидеть в папке configuration, где вычислительные узлы помечены как узлы US и EU соответственно.

Они также настраивают узлы оркестратора для записи данных в региональные бакеты MinIO.

Создание образцов данных

После того, как вы создали имитацию инфраструктуры, вы можете создать образцы данных, используя задание генератора данных, чтобы записать 3000 записей в каждый регион в формате JSON в соответствующий бакет MinIO.

Перейдите в каталог заданий

cd ../jobs

Сгенерируйте данные для США:

bacalhau job run -V Region=us -V Events=3000 \
-V StartDate=2024-01-01 -V EndDate=2024-12-31 \
-V RotateInterval=month data-generator.yaml

Сгенерируйте данные для ЕС:

bacalhau job run -V Region=eu -V Events=3000 \
-V StartDate=2024-01-01 -V EndDate=2024-12-31 \
-V RotateInterval=month data-generator.yaml

Доступ к данным для анализа

Bacalhau поддерживает два способа доступа к региональным данным:

  • Источники ввода Bacalhau**
InputSources:
    - Type: s3
      Source:
        Bucket: local-bucket
        Key: "data/*"

Этот метод предоставляет больше контроля, параметров предварительной обработки и поддерживает другие типы источников, помимо S3.

  • Прямой доступ DuckDB**
SET VARIABLE files = (
    SELECT LIST(file)
    FROM partition_by_hash('s3://local-bucket/**/*.jsonl')
    );
    SELECT * FROM read_json_auto(getvariable('files'));

Этот метод проще и привычнее для заданий, использующих только SQL. Определения заданий также используют SQL-запросы для обработки данных из источника ввода.

Выполнение анализа

После размещения данных вы можете отправлять задачи анализа в виде заданий Bacalhau. В каждом случае, после запуска задания используйте `

bacalhau job describe <job_id>

`, чтобы увидеть результаты задания, передав идентификатор задания из вывода команды `

bacalhau job run

`. Во всех примерах показано использование данных из США. Вы также можете изменить `Region` на `eu`, чтобы увидеть результаты из региона ЕС.

  • Анализ месячных трендов**
bacalhau job run -V Region=us monthly-trends.yaml

Определение задания.

Пример вывода:

month      | total_txns | revenue | unique_customers | avg_txn_value
------------|------------|----------|------------------|---------------
2024-03-01 | 3,421      | 178,932  | 1,245            | 52.30
2024-02-01 | 3,156      | 165,789  | 1,189            | 52.53
2024-01-01 | 2,987      | 152,456  | 1,023            | 51.04
  • Оперативный мониторинг**
  • Hourly Operations (Почасовые операции)
    • Отслеживает метрики работоспособности
    • Контролирует процент успешных транзакций
    • Показывает почасовые закономерности
bacalhau job run -V Region=us hourly-operations.yaml
  • Anomaly Detection (Обнаружение аномалий)
    • Идентифицирует необычные паттерны
    • Использует статистический анализ
    • Отмечает значительные отклонения
bacalhau job run -V Region=us anomaly-detection.yaml
  • Бизнес-аналитика**
  • Product Performance (Эффективность продукта)
    • Анализирует эффективность категорий
    • Отслеживает долю рынка
    • Показывает паттерны продаж
bacalhau job run -V Region=us product-performance.yaml
  • Monthly Trends (Месячные тренды)
    • Долгосрочный анализ трендов
    • Месячные агрегации
    • Ключевые бизнес-показатели
bacalhau job run -V Region=us monthly-trends.yaml
  • Анализ клиентов**
  • Customer Segmentation (Two-Phase) (Сегментация клиентов (Двухфазная))
    • Фаза 1: Вычисление локальных метрик
    • Фаза 2: Объединение и сегментация
    • Запустите Фазу 1
bacalhau job run -V Region=us customer-segments-phase1.yaml
  • Запомните ID задания и запустите Фазу 2
bacalhau job run -V Region=us -V JobID=<phase1-job-id> customer-segments-phase2.yaml

Итог

В этой статье объединены распределенные вычислительные мощности Bacalhau с гибкими возможностями SQL DuckDB для создания распределенного хранилища данных, разнесенного по регионам. Примеры заданий Bacalhau предоставляют ряд аналитических задач, от оперативного мониторинга до сегментации клиентов, при этом данные остаются в исходном месте и используются запросы SQL к данным, хранящимся в S3-совместимых бакетах.

Follow this blog
Send
Share
Pin
1 d   bacalhau   Data   Open Source