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, остальные разбираются в тренажёре.
- Зачем в HDFS большой размер блока (обычно 128 МБ) и репликация (по умолчанию 3)?A)Большой блок нужен, чтобы в один блок помещалось как можно больше разных мелких файлов сразуB)Репликация в 3 копии нужна для ускорения записи данных на диск параллельноC)Размер блока в HDFS не настраивается и жёстко зафиксирован на уровне ядра операционной системыD)Крупный блок — меньше overhead на скан; 3 реплики — надёжность+локальность
показать ответ и разбор
+D)Крупный блок — меньше overhead на скан; 3 реплики — надёжность+локальность// разбор: Большой блок (128 МБ против килобайтов у обычных ФС) выгоден для аналитики: доля времени на позиционирование (seek) и на метаданные NameNode мала относительно последовательного чтения большого блока, а число блоков (и нагрузка на NameNode) остаётся управляемым. Репликация по умолчанию 3 копии блока на разных узлах/стойках даёт отказоустойчивость (узел упал — данные живы), доступность и локальность вычислений (задачу шлют на узел, где лежит блок, — «двигаем вычисление к данным»). Отсюда и проблема мелких файлов: каждый занимает блок и запись в NameNode, раздувая метаданные.
- Какую роль играет NameNode в HDFS и почему это критичная точка?A)Хранит метаданные (какие файлы из каких блоков и где лежат); без него кластер не найдёт данные — классический SPOF, лечится HAB)NameNode хранит сами блоки данных файлов, а DataNode отвечают лишь за их метаданные и именаC)NameNode выполняет пользовательские вычисления над данными, распределяя их между узлами кластераD)Отказ NameNode безопасен: соседний DataNode при его падении берёт его роль на себя
показать ответ и разбор
+A)Хранит метаданные (какие файлы из каких блоков и где лежат); без него кластер не найдёт данные — классический SPOF, лечится HA// разбор: NameNode — мастер HDFS: держит в памяти пространство имён (дерево файлов) и карту «файл → блоки → на каких DataNode они лежат». Сами данные на DataNode, но найти их без NameNode нельзя, поэтому его отказ парализует весь кластер — классическая единая точка отказа (SPOF). Метаданные в памяти также ограничивают число файлов (мелкие файлы раздувают namespace). В проде поднимают HA: активный + standby NameNode с общим журналом (JournalNodes) и автоматическим failover, чтобы пережить падение мастера. Это же причина, почему миллионы мелких файлов в HDFS — проблема.
- Что такое YARN и какова его роль в Hadoop-кластере?A)YARN — это распределённая файловая система Hadoop, хранящая блоки данных на узлах кластераB)Планировщик ресурсов кластера, выдаёт контейнеры под задачи (Spark on YARN)C)YARN — движок SQL-запросов, транслирующий SQL в задачи над данными в хранилище HadoopD)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.
- Что такое Hive metastore и зачем он нужен над файлами в озере?A)Hive metastore хранит сами данные таблиц в своей внутренней базе, заменяя собой HDFS и S3B)Metastore — это движок выполнения SQL-запросов, самостоятельно вычисляющий результаты над даннымиC)Каталог метаданных: хранит схемы, расположение и партиции таблиц поверх файлов — даёт SQL-таблицы над «кучей файлов» в HDFS/S3D)Metastore нужен для хранения прав доступа пользователей к таблицам хранилища
показать ответ и разбор
+C)Каталог метаданных: хранит схемы, расположение и партиции таблиц поверх файлов — даёт SQL-таблицы над «кучей файлов» в HDFS/S3// разбор: Файлы в HDFS/S3 сами по себе — просто байты; чтобы обращаться к ним как к таблицам через SQL, нужен каталог. Hive metastore хранит метаданные: имена таблиц, их схемы (колонки/типы), формат, физическое расположение файлов и список партиций. Движки (Hive, Spark SQL, Trino, Presto) спрашивают metastore «где данные таблицы orders и какая у неё схема» и читают соответствующие файлы. Так одни и те же файлы озера доступны разным движкам как согласованные таблицы. Metastore — стандарт де-факто каталога в Hadoop/lakehouse-стеке.
- Чем managed-таблица Hive отличается от external?A)У external-таблицы DROP удаляет и метаданные, и файлы, а у managed — лишь метаданныеB)Managed и external отличаются форматом файлов: managed — ORC, external — ParquetC)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-таблицы необратимо сносит данные.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.