Как представитель разработчиков в Dremio, я провожу много времени, исследуя технологии и лучшие практики в области проектирования озер данных и делясь полученными знаниями с помощью контента для Subsurface — сообщества Data Lakehouse. Одной из основных тем, в которую я погрузился, является тема форматов таблиц Data Lakehouse, которые позволяют вам брать файлы в вашем озере данных и группировать их в таблицы, с которыми могут работать механизмы обработки данных, такие как Dremio.
Сегодня я хотел бы показать вам, как очень быстро запустить контейнер docker и попробовать Apache Iceberg со Spark, следите за более подробным введением в Subsurface. Прежде чем мы приступим к упражнениям, вот некоторые материалы, которые помогут вам познакомиться с Apache Iceberg и миром табличных форматов Data Lakehouse.
Введение в форматы таблиц и Apache Iceberg
- Meetup: Сравнение форматов таблиц Data Lakehouse
- Meetup: Apache Iceberg и архитектурный взгляд под обложку
- DataNation Podcast: Эпизод табличных форматов
Другие материалы по Apache Iceberg
- Блог: Как поддерживать таблицы Apache Iceberg
- Блог: Скрытое разделение в Apache Iceberg
- Блог: Перенос таблиц Apache Iceberg из Hive
- Блог: Практическое упражнение по миграции Hive
- Блог: Сравнение форматов таблиц (Iceberg, Hudi, Delta Lake)
- Блог: Сравнение форматов таблиц — управление
- Блог: Сравнение форматов таблиц — разделение
Настройка практической среды
Для этого урока вам понадобится установленный Docker, поскольку мы будем использовать этот образ docker, который я создал для простых экспериментов с Apache Iceberg, Apache Hudi и Delta Lake.
alexmerced/table-format-playground
Вы можете легко запустить его с помощью следующей команды:
docker run -it --name format-playground alexmerced/table-format-playground
Примечание: Этот контейнер был собран на 64-битной машине Linux, поэтому образ может не работать на чипсетах M1/ARM. Все, что вам нужно сделать, это пересобрать образ, вы можете найти dockerfiles для этого образа в этом репозитории.
После запуска образа docker вы можете легко открыть Spark с любым из форматов таблиц с помощью следующих команд:
Этот блог будет посвящен Apache Iceberg, но не стесняйтесь играть с другими форматами таблиц, используя их документацию.
Приступаем к работе с Apache Iceberg
-
Запустите Docker-контейнер
docker run -it --name format-playground alexmerced/table-format-playground
. -
Откройте Spark с помощью Iceberg
iceberg-init
.
Теперь мы находимся внутри SparkSQL, где мы можем запускать SQL-запросы к нашему каталогу Iceberg, который был настроен скриптом iceberg-init
. Если вам интересно, какие настройки я использовал, вы можете запустить cat iceberg-init.bash
в терминале.
Создание таблицы в Iceberg
Помните, что мы работаем не с традиционной базой данных, а с озером данных. Поэтому мы создаем и читаем файлы, которые существуют в вашем хранилище озера данных (AWS/Azure/Google Cloud). Поэтому может показаться, что мы работаем с традиционной базой данных, и в этом и заключается прелесть форматов таблиц, подобных Iceberg, которые позволяют работать с файлами, хранящимися в нашем озере данных, так же, как мы работаем с данными в базе данных или хранилище данных.
Для создания новой таблицы Iceberg мы можем просто выполнить следующую команду.
CREATE TABLE iceberg.cool_people (name string) using ICEBERG;
Выглядит как обычный SQL-запрос (если вы не знакомы с SQL, узнайте больше здесь), но есть несколько моментов, на которые следует обратить внимание.
-
iceberg.cool_people
в Spark мы должны задать имя для нашего каталога таблиц, в моем сценарии я назвал его «iceberg», поэтомуiceberg.cool_people
означает, что я создаю таблицуcool_people
в моем каталоге под названиемiceberg
. -
Пункт
using ICEBERG
указывает Spark использовать Iceberg для создания таблицы вместо стандартного использования Hive.
Примечание: время, необходимое для выполнения этих утверждений, может отличаться, поскольку мы запускаем его в контейнере docker на нашем компьютере. Spark — это программное обеспечение, предназначенное для работы на многих компьютерах в кластере, поэтому имейте это в виду при работе со Spark или любым MPP (Massively Parallel Processing) инструментом на одном компьютере.
Добавление некоторых записей
Выполните следующие действия:
INSERT INTO iceberg.cool_people VALUES ("Claudio Sanchez"), ("Freddie Mercury"), ("Cedric Bixler");
Бонусные очки, если вы уловили музыкальные отсылки
Запрос записей
Выполните следующие действия:
SELECT * FROM iceberg.cool_people;
Завершение сеанса
-
Для выхода из SparkSQL
exit;
-
Чтобы выйти из контейнера docker
exit
.
Если вы хотите использовать этот контейнер снова в будущем:
-
docker start format-playground
-
docker attach format-playground
Заключение
Теперь вы знаете, как быстро настроить себя, чтобы вы могли экспериментировать с Apache Iceberg. Ознакомьтесь с их документацией, чтобы узнать о многих замечательных возможностях, существующих в Iceberg, таких как путешествие во времени, скрытые разделы, эволюция разделов, эволюция схем, ACID транзакции и многое другое.
Одним из лучших аспектов Iceberg является то, что так много инструментов создают поддержку Iceberg, например, Dremio (который также является одним из участников Iceberg). Dremio предоставляет следующие возможности для работы с Iceberg на своей платформе Dremio Cloud, которая позволяет вам создать озеро открытых данных без затрат на программное обеспечение/лицензирование, что позволяет компаниям любого размера начать строить сложные и открытые конвейеры данных:
- Возможность запрашивать таблицы Iceberg с помощью Sonar Query Engine
- Полный DML Iceberg для выполнения удаления/обновления/вставки в таблицах Iceberg из Sonar Query Engine.
- Возможность использовать каталог на основе Nessie для таблиц Iceberg с помощью Arctic Intelligent Metastore (позволяет использовать функции Git для работы с данными).
Следите за более подробными учебниками по Iceberg на сайте Subsurface и обязательно следите за мной в twitter, чтобы не пропустить ни одного из моих будущих материалов Data Lakehouse.
Примечание: для получения информации о веб-разработке следите за этим аккаунтом в твиттере