В связи с диверсификацией требований к хранению и обработке больших данных вопрос о том, как создать единое хранилище озера данных и выполнять на нем различные формы анализа данных, стал важным направлением для предприятий по созданию экосистемы больших данных. Проект Apache Iceberg, инициированный Netflix, имеет табличные форматы с поддержкой ACID и стал популярным направлением в области больших данных и озер данных.
Apache Iceberg — это продукт с открытым исходным кодом, разработанный Netflix и вошедший в инкубатор Apache 16 ноября 2018 года. Озеро данных Netflix изначально было построено с помощью Hive, но после обнаружения множества недостатков в конструкции Hive оно начало разрабатывать собственный Iceberg. Проблемы, возникающие при использовании улья, заключаются в следующем:
В целом, основные требования Netflix к созданию «Айсберга» можно резюмировать следующим образом:
Apache Iceberg — это новый формат для отслеживания очень больших таблиц, разработанный специально для хранилищ объектов, таких как S3. Иметь следующие возможности:
Apache Iceberg поддерживает как DataStream API Apache Flink, так и Table API для записи записей в таблицы Iceberg. В настоящее время Iceberg и Apache Flink 1.11.x интегрированы. Поддерживаемые функции следующие:
Iceberg использует API DataSourceV2 Apache Spark для реализации источника данных и каталога. Spark DSv2 — это развивающийся API, который обеспечивает различные уровни поддержки в версиях Spark:
Trino — это вычислительный механизм MPP на основе памяти. Благодаря параллельным вычислениям в памяти можно значительно повысить скорость вычислений. В сочетании с некоторыми оптимизациями (такими как сокращение, удаление предикатов и т. д.) он может решать вычислительные задачи с большими объемами данных. . Ответ второго уровня. Таблицами Iceberg можно управлять, настроив коннектор Iceberg в Trino.
На рисунке показана структура таблицы айсберга, а связанные с ней понятия следующие:
Хранит метаданные текущей версии (вся информация о снимках).
Файлы моментальных снимков, также известные как файлы манифеста, хранятся в формате avro и начинаются с snap-. Каждое обновление будет генерировать файл списка, отражающий состояние таблицы на определенный момент. Snap*.avro хранит список файлов манифеста, каждый из которых занимает одну строку. В каждой строке хранится путь к файлу манифеста, диапазон разделов файлов данных, хранящихся в файле манифеста, сколько файлов данных было добавлено, сколько файлов данных было удалено и другая информация. Эту информацию можно использовать для обеспечения фильтрации во время запроса.
Файл манифеста на самом деле является файлом метаданных, в котором указан список файлов данных, составляющих моментальный снимок. Каждая строка представляет собой подробное описание каждого файла данных, включая состояние файла данных, путь к файлу, информацию о разделах, статистическую информацию на уровне столбца (например, максимальное и минимальное значения каждого столбца, количество нулевых значений, и т. д.), размер файла и его содержимое. Такая информация, как количество строк данных. Статистическая информация на уровне столбца может предоставить данные для оператора во время сканирования, чтобы можно было отфильтровать ненужные файлы.
Файл манифеста хранится в формате avro, поэтому он заканчивается суффиксом .avro, например d5ba704c-1453-4f18-9077-6944baa1b3f2-m0.avro.
Каждое обновление создает один или несколько файлов манифеста.
Файлы данных — это файлы, которые фактически хранят данные в таблице Apache Iceberg, обычно в каталоге данных каталога хранения данных таблицы. Если у нас формат файла паркет, то файл заканчивается на .parquet,
Например, 00000-0-0eca9076-9c03-4077-baa9-e68769e15c58-00001.parquet — это файл данных.
Основная идея: отслеживать все изменения в таблице на временной шкале.
изоляция моментальных снимков
Iceberg предоставляет абстрактный интерфейс на уровне таблицы и хранит информацию метаданных таблицы в файлах (а не через HMS). На рисунке выше метаданные HMS хранят входную информацию таблицы айсберга. То есть информация о пути ввода метаданных текущей версии таблицы айсберга. В практических приложениях, как показано на рисунке ниже, информация о метаданных порядка таблицы хранится в HMS, а содержимое хранимой информации Metadata_location= hdfs://node1:9000/user/hive/warehouse/orders/metadata/00009-7aa28ddf -34fe -496b-8888-3b806a8edb7a.metadata.json — это текущая запись метаинформации моментального снимка таблицы заказов. previous_metadata_location — это запись о предыдущем снимке.