СОЗДАНИЕ ETL-ДВИЖКА ДЛЯ РЕПЛИКАЦИИ ДАННЫХ ИЗ APACHE HIVE В CLICKHOUSE
Представлено создание ETL-движка, который помогает автоматически извлекать, преобразовывать и загружать данные из разных источников. Мы сосредоточились на разработке быстрого инструмента, который использует параллельную обработку и оптимизированные алгоритмы. Результаты тестирования показывают, что движок эффективно справляется с большими объемами данных, что помогает лучше анализировать информацию и принимать обоснованные бизнес-решения.
В статье мы представим процесс создания ETL, который включает извлечение данных из источников, их преобразование для соответствия требованиям целевой системы и загрузку в конечное хранилище. Apache Hive — это система управления данными, построенная на Hadoop, которая позволяет выполнять SQL-подобные запросы к большим объемам данных, хранящимся в распределенных файловых системах. ClickHouse, в свою очередь, является колоночной системой управления базами данных (СУБД), оптимизированной для обработки аналитических запросов в реальном времени. Создание ETL-движка [1; 2] между этими двумя системами позволяет обеспечить эффективный перенос и обработку данных, что открывает новые возможности для анализа и бизнес-аналитики. В статье мы подробно рассмотрим этапы разработки такого движка, включая извлечение данных из Hive, их трансформацию и загрузку в ClickHouse, а также поделимся практическими примерами реализации. Актуальность работы заключается в том, что Clickhouse является улучшенным инструментом для работы с BI-инструментами, следовательно, его целесообразно использовать при создании дашбордов и витрин данных. Также Clickhouse более удобен для обработки больших данных, масштабирования и распределенных вычислений. Процесс обработки данных реализован при помощи технологий: Apache Hive, Clickhouse, Apache Airflow (необходим для того, чтобы создать в нем даг, который будет работать по расписанию с определенными требованиями, которые укажет пользователь), Jupiterlab (технология, в которой требуется произвести реализацию алгоритма), Apache Spark (распределенная вычислительная платформа, предназначенная для обработки больших данных, она поддерживает различные языки программирования, включая Python). Язык реализации алгоритма Python. Python становится популярным выбором для реализации ETL-движков благодаря простоте и читаемости кода. Кроме того, поддержка параллельной обработки и интеграция с облачными сервисами делают Python универсальным инструментом для обработки больших объемов информации. Наконец, активное сообщество и доступная документация способствуют быстрому обучению и решению возникающих проблем. Библиотеки, которые понадобятся в Python: PySpark (для взаимодействия со Apache Spark), argparse (для того, чтобы передавать данные из дага в скрипт в Jupiterlab), airflow (для того, чтобы создать даг в Apache Airflow с необходимыми параметрами), pendulum (для того, чтобы конкретно указать timezone для работы движка и дага), ipywidgets (для реализации дружественного интерфейса в приложении, чтобы пользователи могли пользоваться данным движком). Цель работы заключается в создании ETL-движка для репликации данных их Apache Hive в Clickhouse. Данный движок должен транспортировать данные из Apache Airflow в Clickhouse. Требуется определить основные подцели:
создать шаблоны для создания дага. Требуется создать два шаблона дага, один включает все библиотеки, необходимые для создания дага, а другой содержит непосредственно скрипт создания дага;
создать несколько классов. Необходимы классы для работы с таблицей в Clickhouse, для создания таблицы в Clickhouse, для работы с таблицей в Apache Hive, для работы с файлами hdfs и для создания основного класса, в котором будет произведена реализация работы всех классов и в который будут передаваться аргументы из дага;
создать приложение с интерфейсом, встроенное в Jupiterlab, с помощью которого пользователь сможет сам создавать свой даг и ставить в расписание в Apache Airflow;
Реализация алгоритма по созданию движка
Требуется создать два шаблона и положить их в папку templates. Первый шаблон необходимо назвать libraries.py. В него поместим все библиотеки, необходимые для создания дага и выполнения определенных модификаций при этом. Второй шаблон необходимо назвать template_create_dag.py, в нем выполним скрипт непосредственно по созданию дага. Шаблоны должны объединяться в один питоновский файл, принять параметры из приложения, откуда пользователь передает параметры по созданию дага. После этого в Apache Airflow должен появится даг, включающий скрипт из объединенных шаблонов.
В Jupiterlab следует создать пять классов, которые будут реализовывать необходимый нам алгоритм. Изначально определяются необходимые параметры, которые передаются из дага, такие как названия таблиц и баз данных, а также учетные данные для подключения к ним. После этого программа считывает введенные аргументы и сохраняет их для дальнейшего использования. Это позволяет пользователю гибко настраивать поведение программы в зависимости от его потребностей. Класс ManagerHelper представляет собой мощный инструмент для управления данными между системами Impala и ClickHouse, используя возможности Apache Spark. Он инкапсулирует логику создания и обработки таблиц, обеспечивая удобный интерфейс для взаимодействия с базами данных. Конструктор класса принимает необходимые параметры, такие как имя таблицы и базы данных в ClickHouse, а также учетные данные для подключения. Это позволяет легко настраивать объект ManagerHelper для работы с различными источниками данных. Внутри класса создаются экземпляры вспомогательных классов, таких как ImpalaHelper, HDFSHelper и ClickHouseHelper, которые обеспечивают доступ к специфическим функциям работы с данными. Эти классы помогают разделить ответственность и упрощают поддержку кода. Например, ClickHouseHelper отвечает за взаимодействие с ClickHouse, в то время как ImpalaHelper предоставляет методы для работы с Impala. Такой подход способствует лучшей модульности и переиспользованию кода. Класс также включает методы для генерации SQL-запросов, необходимых для создания таблиц в ClickHouse на основе структуры таблиц в Impala. Метод generate_create_table_sql определяет логику обработки как партиционных, так и непартиционных таблиц. В зависимости от наличия партиций вызываются соответствующие методы для обработки данных. Это позволяет эффективно управлять различными типами таблиц и обеспечивает гибкость при работе с изменениями в структуре данных.
Далее требуется создать интерфейс, с помощью которого пользователи будут создавать для себя даги, с определенными параметрами. Необходимо создать интерактивный интерфейс для работы с Apache Spark и базами данных, используя библиотеку ipywidgets. Он включает чекбокс для выбора полной перезаливки данных, текстовые поля для ввода расписания и названий таблиц, а также поля для выбора даты. Пользователь может инициировать действия через кнопки, такие как создание DAG или получение информации о таблице. Основная цель — упростить взаимодействие с данными и автоматизировать процессы для пользователя.
Внедрение ETL-движка для переноса данных из Hive в ClickHouse позволяет значительно улучшить процессы обработки и анализа больших объемов информации. Это решение обеспечивает интеграцию разрозненных данных, повышает их качество за счет трансформации и очистки, а также автоматизирует загрузку, что сокращает время на получение актуальной информации. Использование ClickHouse, известного высокой производительностью и возможностями работы с аналитическими запросами в реальном времени, в сочетании с мощными инструментами ETL позволяет компаниям эффективно реагировать на изменения в бизнес-среде и принимать обоснованные решения на основе качественных данных.