Идею Lakehouse можно описать достаточно просто: взять все лучшее от Data Warehouse и Data Lake и избавиться от главных недостатков.
Data WarehouseОбычно реализуются на основе СУБД с поддержкой ACID-транзакций, заточены под работу со структурированными (табличными) данными посредством SQL-запросов.
Главные минусы: высокая стоимость владения, storage и compute вертикально интегрированы, линейное масштабирование может поддерживаться СУБД, но обычно только симметричными узлами. На практике есть достижимый предел по количеству одновременных пользователей (запросов) и масштабированию кластера, после которого эффективней создавать новый кластер рядом.
Также в Data Warehouse есть сложности с эффективной работой над неструктурированными данными (логи, изображения, видео, аудио и т. д.) и реализацией потоковой аналитики.
Data LakeData Lake появились в ответ на проблему дороговизны хранения и обработки в Data Warehouse и позволили значительно дешевле хранить большие массивы данных в любых форматах.
В первых версиях compute-инженерам приходилось писать программы, которые запускались распределенно в кластере с помощью фреймворков. Но такой подход был слишком сложным для аналитиков и других бизнес-пользователей. Потребность в снижении порога входа и ускорении обработки привела к появлению и развитию целого ряда альтернативных вычислительных движков, включая SQL-движки. Именно благодаря зрелости Data Lake мы сегодня имеем выбор между Spark, Trino и Impala — как полноценными compute-движками для Lakehouse.
Кроме традиционной batch-обработки, активно формировался и спрос на инструменты для работы с непрерывными потоками данных, способные обеспечить минимальные задержки и гарантии доставки. Так, в этой же экосистеме появились и Spark Streaming, и Flink, и некоторые другие инструменты для поточной аналитики.
Однако были и минусы. Одной из ключевых проблем были сложности с обновлением таблиц: потребители могли получить неконсистентные данные, пока процесс обновления не завершился, — не говоря уже о том, что сам процесс мог прерваться из-за сбоя.
LakehouseОткрытые табличные форматы (Open Table Format, OTF) позволили решить проблему с обновлением таблиц: появилась поддержка ACID-гарантий на уровне отдельной таблицы. Открытость этих форматов дала возможность реализовать совместимость в различных инструментах. Сегодня табличный формат Apache Iceberg поддерживается большинством compute-движков как минимум на уровне чтения данных, а многие также поддерживают запись и обновления.
Разделение storage и compute уже стало архитектурной основой, а не опциональной функцией. Это дает целый ряд преимуществ, благодаря которым мы можем:
- масштабировать storage и compute независимо, расширяя только то, в чем есть необходимость, либо, наоборот, сокращать;
- использовать storage той реализации, которая лучше всего отвечает требованиям, включая варианты от облачных провайдеров при реализации Lakehouse в облаке или гибридном исполнении;
- использовать compute, наиболее подходящий для конкретной задачи: batch/ streaming, adhoc/ELT;
- применять одновременно несколько вариантов compute;
- запускать, масштабировать и останавливать каждый compute, когда это необходимо.