Learning Platform
Глоссарий Troubleshooting
Урок 09.01 · 14 мин
Средний
LakehouseData LakeData WarehouseMedallion ArchitectureBronzeSilverGold

Архитектура Lakehouse

Эволюция: от хранилища к озеру и обратно

Традиционная архитектура данных прошла три поколения. Каждое решало проблемы предыдущего — и создавало новые.

Data Warehouse (поколение 1)

Data Warehouse — это структурированное хранилище с жёсткой схемой, оптимизированное для аналитических запросов. Классические примеры: Teradata, Oracle DWH, Amazon Redshift.

Преимущества: ACID-транзакции, SQL-доступ, строгая типизация, быстрые аналитические запросы.

Проблемы: дорогое проприетарное хранилище, невозможность работать с неструктурированными данными (логи, JSON, изображения), жёсткая привязка к вендору, сложная масштабируемость.

Data Lake (поколение 2)

Data Lake — дешёвое объектное хранилище (S3, GCS, ADLS) для данных любого формата. “Складываем всё, разберёмся потом.”

Преимущества: дешёвое хранилище, любые форматы данных, горизонтальная масштабируемость, открытые форматы (Parquet, ORC, Avro).

Проблемы: нет ACID-транзакций (concurrent writes ломают данные), нет контроля схемы (schema-on-read = хаос), нет time travel, “data swamp” — данные есть, но найти и использовать их невозможно.

Data Lake проблема:
Writer A:  read -> modify -> write ──┐
Writer B:  read -> modify -> write ──┘──> CONFLICT! Потеря данных
                                         Нет изоляции транзакций

Lakehouse (поколение 3)

Lakehouse = объектное хранилище (дешёвое, масштабируемое) + метаданный слой (ACID, схема, time travel). Это не новый продукт — это архитектурный паттерн, реализуемый через lakehouse-форматы: Delta Lake, Apache Iceberg, Apache Hudi, Apache Paimon.

Lakehouse архитектура

Вычислительные движки → Metadata Layer → Объектное хранилище

Вычислительные движки
Spark, Flink, Trino, Presto
Metadata Layer
transaction log, schema enforcement, snapshots
Delta Lake / Iceberg / Hudi / Paimon
Объектное хранилище
S3, GCS, ADLS, MinIO
Файлы: Parquet, ORC, Avro
TIP

Что решает Lakehouse

Lakehouse добавляет metadata layer поверх дешёвого объектного хранилища. Этот слой обеспечивает: (1) ACID-транзакции — безопасные concurrent writes, (2) Schema enforcement — контроль типов при записи, (3) Time travel — доступ к любой предыдущей версии данных, (4) Upsert/Merge — обновление отдельных записей без перезаписи всего файла.

Медальонная архитектура (Medallion Architecture)

Стандартный паттерн организации данных в Lakehouse — трёхуровневая медальонная архитектура: Bronze -> Silver -> Gold.

Lakehouse Medallion Architecture
Raw JSON → Validated Parquet (Bronze) → Cleansed + Deduped (Silver) → Aggregated Metrics (Gold)
SourceKafka / S3 / JDBC
Layers3 (Bronze/Silver/Gold)
Formats4 (Delta/Iceberg/Hudi/Paimon)
PatternMedallion Architecture

Click each layer to see transformations. Hover for data quality guarantees.

Bronze (сырые данные)

Bronze-слой — точная копия данных из источника. Никакой трансформации, никакой валидации. Append-only запись.

# Bronze: загрузка сырых JSON-событий
raw_events = (
    spark.readStream
    .format("kafka")
    .option("subscribe", "user_events")
    .load()
)

# Сохраняем как есть -- включая metadata Kafka
raw_events.writeStream \
    .format("delta") \
    .option("checkpointLocation", "/checkpoints/bronze") \
    .start("/data/bronze/user_events")

Гарантии Bronze: полнота данных (ничего не потеряно), возможность повторной обработки (re-processing), append-only для аудита.

Silver (валидированные данные)

Silver-слой — очищенные, типизированные, дедуплицированные данные. Здесь применяется schema enforcement и бизнес-логика очистки.

# Silver: валидация и очистка
from pyspark.sql.functions import from_json, col, sha2, concat

bronze = spark.readStream.format("delta").load("/data/bronze/user_events")

silver = (
    bronze
    .select(from_json(col("value").cast("string"), schema).alias("data"))
    .select("data.*")
    # Валидация: отбрасываем записи без user_id
    .filter(col("user_id").isNotNull())
    # Дедупликация по бизнес-ключу
    .dropDuplicates(["event_id"])
    # Типизация
    .withColumn("amount", col("amount").cast("double"))
)

silver.writeStream \
    .format("delta") \
    .option("checkpointLocation", "/checkpoints/silver") \
    .start("/data/silver/user_events")

Гарантии Silver: валидная схема, уникальные записи, корректные типы.

Gold (бизнес-агрегаты)

Gold-слой — агрегированные метрики и бизнес-таблицы, готовые для дашбордов и аналитики. Часто включает joins с dimension-таблицами.

# Gold: бизнес-агрегаты
silver = spark.read.format("delta").load("/data/silver/user_events")
customers = spark.read.format("delta").load("/data/silver/customers")

# Join + агрегация
gold_metrics = (
    silver
    .join(customers, "user_id")
    .groupBy("region", "event_type")
    .agg(
        count("*").alias("event_count"),
        sum("amount").alias("total_amount"),
        avg("amount").alias("avg_amount")
    )
)

gold_metrics.write \
    .format("delta") \
    .mode("overwrite") \
    .save("/data/gold/regional_metrics")

Гарантии Gold: бизнес-метрики, enriched data (joins с dimensions), готовые для BI-инструментов.

NOTE

Медальонная архитектура — не догма

В реальных проектах количество слоёв может отличаться. Некоторые команды добавляют Platinum (ML features) или сокращают до двух слоёв (Raw + Curated). Ключевой принцип — разделение ответственности: каждый слой имеет чёткие гарантии качества данных.

Что решают Lakehouse-форматы

Все четыре формата (Delta Lake, Apache Iceberg, Apache Hudi, Apache Paimon) решают одну фундаментальную проблему: ACID-транзакции поверх объектного хранилища. Но делают это по-разному:

ФорматАрхитектураУникальная фичаЛучший сценарий
Delta LakeTransaction logUniForm (читай Delta как Iceberg)Databricks экосистема
Apache IcebergCatalog + snapshotsPartition evolution без rewriteМульти-движковая среда
Apache HudiTimeline + base filesIncremental queries, MORUpsert-heavy нагрузки
Apache PaimonLSM-treeChangelog streaming CDCStreaming-first архитектура

В следующих уроках мы подробно разберём каждый формат: архитектуру, ключевые возможности, практические примеры, anti-patterns и сценарии использования.

Проверка знанийKnowledge check
Какую фундаментальную проблему Data Lake решает архитектура Lakehouse?
ОтветAnswer
Data Lake не обеспечивает ACID-транзакции: concurrent writes могут привести к потере данных, нет контроля схемы (schema-on-read приводит к 'data swamp'), нет time travel для отката к предыдущим версиям. Lakehouse добавляет metadata layer (Delta Lake, Iceberg, Hudi, Paimon) поверх объектного хранилища, который обеспечивает ACID, schema enforcement, time travel и upsert операции.
Проверка знанийKnowledge check
Объясните разницу между Bronze, Silver и Gold слоями в медальонной архитектуре.
ОтветAnswer
Bronze -- сырые данные из источника без трансформации (append-only, для аудита и re-processing). Silver -- валидированные, дедуплицированные, типизированные данные с schema enforcement. Gold -- агрегированные бизнес-метрики, enriched через joins с dimension-таблицами, готовые для BI-дашбордов. Каждый слой имеет чёткие гарантии качества данных.

Что дальше?

В следующем уроке мы глубоко разберём Delta Lake — самый популярный lakehouse-формат, разработанный Databricks. Вы узнаете, как работает transaction log, time travel и новые возможности Spark 4.0: UniForm и Coordinated Commits.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. Какую фундаментальную проблему Data Lake решает архитектура Lakehouse?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 8