сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Spark и большие данные

Hadoop и lakehouse

От Hadoop к lakehouse

Стек больших данных прошёл путь от HDFS с MapReduce к озеру на объектном сторадже с табличными форматами. Собес проверяет, понимаешь ли ты, зачем поверх «просто паркетов в S3» нужен транзакционный слой.

Стержень: объектный сторадж - не файловая система (нет rename, нет консистентного листинга), поэтому lakehouse строят через table format с ACID.

// Формулировки: «что такое lakehouse?», «зачем Delta/Iceberg поверх файлов?», «чем Trino отличается от Spark по задачам?».

Наследие Hadoop

Классическая триада Hadoop: HDFS (Hadoop Distributed File System) (распределённые блоки с репликацией), YARN (управление ресурсами), MapReduce (вычисления, вытесненные Spark'ом). Понимать надо, начинать новое на MapReduce - нет.

HDFS: NameNode держит все метаданные в памяти и потому ненавидит мелкие файлы - каждый файл это запись в его памяти; DataNode хранят блоки по 128 МБ с фактором репликации 3.

// Hive принёс SQL поверх файлов плюс metastore - каталог таблиц и партиций. Metastore пережил сам Hive и стал общим каталогом для Spark, Trino и остальных движков.

NameNode / DataNode
метаданные HDFS в памяти / хранение блоков
Hive metastore
каталог таблиц и партиций, общий для движков

Озеро и табличные форматы

Data lake на объектном сторадже (S3-класс) сменил HDFS: дешевле, эластичнее, хранение отвязано от вычислений. Но объектный сторадж - не файловая система: нет атомарного rename, нет консистентного листинга, из-за чего параллельная запись «просто паркетов» даёт читателям полусостояния.

Ровно ради этого существуют table formats (Delta, Iceberg, Hudi) - транзакционный слой над файлами: атомарные ACID-коммиты (atomicity, consistency, isolation, durability), time travel, эволюция схемы, компакция.

// То есть table format превращает набор файлов в таблицу с гарантиями: читатель видит либо старый снапшот, либо новый целиком, но никогда полузаписанное состояние.

Delta / Iceberg
табличные форматы с ACID поверх файлов
time travel
чтение снапшота таблицы на момент в прошлом

Lakehouse и движки

Lakehouse = озеро + table format + SQL-движки: транзакции и качество DWH (data warehouse) на дешёвом объектном сторадже. Раскладка слоёв та же - медальон bronze/silver/gold. MERGE делает upsert и приземление CDC (change data capture) по ключу.

Обслуживание обязательно: мелкие коммиты стриминга требуют регулярной компакции и вакуума старых снапшотов, иначе озеро разрастается хвостом версий.

// Движки дополняют друг друга: Trino/Presto - федеративный интерактивный SQL по озеру и базам, Spark - тяжёлые трансформации. Гонять терабайтный ETL (extract, transform, load) через Trino или секундный ad-hoc через Spark - не их ниши.

lakehouse
озеро + table format + SQL: DWH-гарантии на дешёвом сторадже
compaction / vacuum
склейка мелких файлов / чистка старых снапшотов

Как отвечать: «Что такое lakehouse и зачем table format поверх файлов?»

Lakehouse это архитектура, которая даёт гарантии и удобство хранилища данных прямо на дешёвом озере из файлов на объектном сторадже. Появился он потому, что объектный сторадж вроде S3 дёшев и эластичен, но это не файловая система: там нет атомарного переименования и консистентного листинга. Из-за этого, если просто писать паркеты параллельно, читатель может увидеть полузаписанное состояние - часть новых файлов уже есть, часть нет. Table format - Delta, Iceberg или Hudi - решает это, добавляя над файлами транзакционный слой: есть журнал коммитов, и чтение видит либо целиком старый снапшот, либо целиком новый. Плюс он приносит ACID-операции вроде MERGE для upsert и CDC, time travel к прошлым снапшотам, эволюцию схемы и компакцию мелких файлов. По сути table format превращает кучу файлов в настоящую таблицу, а lakehouse это озеро плюс этот слой плюс SQL-движки поверх.

Почему это сильный ответ: назван корень проблемы (объектный сторадж ≠ FS, полусостояния при параллельной записи), функция table format (атомарные коммиты + ACID/time travel) и определение lakehouse как их суммы.

На чём валят

  • Миллионы мелких файлов в HDFS - NameNode задыхается метаданными.
  • «Просто паркеты в S3» с параллельной записью - читатели видят полусостояния; ради этого и есть table format.
  • Строить новый пайплайн на MapReduce или чистом Hive-on-MR в 2026.
  • Забыть vacuum и expire snapshots - озеро растёт в разы от хвоста версий.
  • Один движок на всё: Trino для терабайтного ETL или Spark для секундных ad-hoc - не их ниши.

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 12, остальные разбираются в тренажёре.

  1. #hadoop_lakehouse1 / 5
    Зачем в HDFS большой размер блока (обычно 128 МБ) и репликация (по умолчанию 3)?
    A)Большой блок нужен, чтобы в один блок помещалось как можно больше разных мелких файлов сразу
    B)Репликация в 3 копии нужна для ускорения записи данных на диск параллельно
    C)Размер блока в HDFS не настраивается и жёстко зафиксирован на уровне ядра операционной системы
    D)Крупный блок — меньше overhead на скан; 3 реплики — надёжность+локальность
    показать ответ и разбор
    +D)Крупный блок — меньше overhead на скан; 3 реплики — надёжность+локальность

    // разбор: Большой блок (128 МБ против килобайтов у обычных ФС) выгоден для аналитики: доля времени на позиционирование (seek) и на метаданные NameNode мала относительно последовательного чтения большого блока, а число блоков (и нагрузка на NameNode) остаётся управляемым. Репликация по умолчанию 3 копии блока на разных узлах/стойках даёт отказоустойчивость (узел упал — данные живы), доступность и локальность вычислений (задачу шлют на узел, где лежит блок, — «двигаем вычисление к данным»). Отсюда и проблема мелких файлов: каждый занимает блок и запись в NameNode, раздувая метаданные.

  2. #hadoop_lakehouse2 / 5
    Какую роль играет NameNode в HDFS и почему это критичная точка?
    A)Хранит метаданные (какие файлы из каких блоков и где лежат); без него кластер не найдёт данные — классический SPOF, лечится HA
    B)NameNode хранит сами блоки данных файлов, а DataNode отвечают лишь за их метаданные и имена
    C)NameNode выполняет пользовательские вычисления над данными, распределяя их между узлами кластера
    D)Отказ NameNode безопасен: соседний DataNode при его падении берёт его роль на себя
    показать ответ и разбор
    +A)Хранит метаданные (какие файлы из каких блоков и где лежат); без него кластер не найдёт данные — классический SPOF, лечится HA

    // разбор: NameNode — мастер HDFS: держит в памяти пространство имён (дерево файлов) и карту «файл → блоки → на каких DataNode они лежат». Сами данные на DataNode, но найти их без NameNode нельзя, поэтому его отказ парализует весь кластер — классическая единая точка отказа (SPOF). Метаданные в памяти также ограничивают число файлов (мелкие файлы раздувают namespace). В проде поднимают HA: активный + standby NameNode с общим журналом (JournalNodes) и автоматическим failover, чтобы пережить падение мастера. Это же причина, почему миллионы мелких файлов в HDFS — проблема.

  3. #hadoop_lakehouse3 / 5
    Что такое YARN и какова его роль в Hadoop-кластере?
    A)YARN — это распределённая файловая система Hadoop, хранящая блоки данных на узлах кластера
    B)Планировщик ресурсов кластера, выдаёт контейнеры под задачи (Spark on YARN)
    C)YARN — движок SQL-запросов, транслирующий SQL в задачи над данными в хранилище Hadoop
    D)YARN отвечает за репликацию блоков между узлами ради отказоустойчивости хранения данных
    показать ответ и разбор
    +B)Планировщик ресурсов кластера, выдаёт контейнеры под задачи (Spark on YARN)

    // разбор: YARN (Yet Another Resource Negotiator) — слой управления ресурсами Hadoop. ResourceManager ведёт учёт свободных CPU/памяти по кластеру и распределяет их между приложениями, NodeManager на каждом узле запускает и следит за контейнерами, а ApplicationMaster приложения (например, Spark-джоба) договаривается с RM о контейнерах под свои исполнители. Так несколько фреймворков (Spark, MapReduce, Hive) делят один кластер, не мешая друг другу. «Spark on YARN» именно про это — Spark берёт исполнителей как контейнеры YARN. Аналогичную роль в облаке/современном стеке играет Kubernetes.

  4. #hadoop_lakehouse4 / 5
    Что такое Hive metastore и зачем он нужен над файлами в озере?
    A)Hive metastore хранит сами данные таблиц в своей внутренней базе, заменяя собой HDFS и S3
    B)Metastore — это движок выполнения SQL-запросов, самостоятельно вычисляющий результаты над данными
    C)Каталог метаданных: хранит схемы, расположение и партиции таблиц поверх файлов — даёт SQL-таблицы над «кучей файлов» в HDFS/S3
    D)Metastore нужен для хранения прав доступа пользователей к таблицам хранилища
    показать ответ и разбор
    +C)Каталог метаданных: хранит схемы, расположение и партиции таблиц поверх файлов — даёт SQL-таблицы над «кучей файлов» в HDFS/S3

    // разбор: Файлы в HDFS/S3 сами по себе — просто байты; чтобы обращаться к ним как к таблицам через SQL, нужен каталог. Hive metastore хранит метаданные: имена таблиц, их схемы (колонки/типы), формат, физическое расположение файлов и список партиций. Движки (Hive, Spark SQL, Trino, Presto) спрашивают metastore «где данные таблицы orders и какая у неё схема» и читают соответствующие файлы. Так одни и те же файлы озера доступны разным движкам как согласованные таблицы. Metastore — стандарт де-факто каталога в Hadoop/lakehouse-стеке.

  5. #hadoop_lakehouse5 / 5
    Чем managed-таблица Hive отличается от external?
    A)У external-таблицы DROP удаляет и метаданные, и файлы, а у managed — лишь метаданные
    B)Managed и external отличаются форматом файлов: managed — ORC, external — Parquet
    C)External-таблицу не получится читать через SQL, она доступна лишь напрямую как файлы
    D)Managed — DROP сносит файлы; external — DROP убирает лишь метаданные
    показать ответ и разбор
    +D)Managed — DROP сносит файлы; external — DROP убирает лишь метаданные

    // разбор: Различие — во владении данными. Managed (internal) таблица: Hive считает себя владельцем данных, они лежат в его складском каталоге, и DROP TABLE удаляет и метаданные, и сами файлы. External таблица: данные лежат по указанному внешнему пути и «принадлежат» кому-то ещё (другой пайплайн, общий бакет), Hive хранит лишь метаданные — DROP убирает определение таблицы, но файлы остаются. External берут, когда данными управляет внешний процесс или их читают несколько систем; managed — когда жизненный цикл данных целиком за Hive. Спутать опасно: DROP managed-таблицы необратимо сносит данные.

дальше

Теорию прочитали. Навык ставится повторением

В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.