Аналитика больших данных является одной из самых быстрорастущих областей в мире из-за огромного количества преимуществ, которые можно получить с ее помощью. Xранение, анализ и передача больших данных предполагает использование специальных фреймворков. Наиболее используемые – Spark и Hadoop. Существует множество облачных сервисов, которые предоставляют эти фреймворки для пакетной и потоковой обработки, передачи данных, их хранения и построения сложной аналитики c применением методов машинного обучения.
В силу различных факторов разработчикам иногда приходится переносить
свои решения из одного сервиса на другой. Во время переноса могут возникать проблемы, о которых мы расскажем на примере переноса пайплайна обработки данных из сервиса Azure DataBricks в Yandex Cloud DataProc.
О сервисе Yandex Cloud DataProc
Yandex Cloud DataProc – это управляемый сервис Spark и Hadoop,
который позволяет быстро создавать кластеры и легко управлять ими, что помогает сократить временные затраты на администрирование и сосредоточиться на работе с данными.
DataProc имеет встроенную интеграцию с другими сервисами в Yandex
Cloud, такими как Managed Service for Apache Kafka, Clickhouse, S3 Object Storage, Мониторинг и Cloud Logging.
В Yandex Cloud DataProc есть возможность выбора сервисов для конфигурирования и управления кластером: YARN, HBase, Flink, Hive,
Zepplin, Zookeeper и другие.
О переносе решения
Наше решение состояло из проекта на python для интерфейса PySpark.
Главный скрипт запускался как задача внутри UI DataBricks. В качестве
основного хранилища данных использовался Azure Blob Storage (Рис.1).
При переходе стоит обратить внимание на версии Spark в сервисах.
Последняя версия в Yandex Cloud DataProc – 3.0.2. Если проект требует
больших изменений при смене версий, то целесообразнее изменить
конфигурацию кластера при его создании.
В DataBricks есть встроенная функция управления задачами Workflows,
которая по расписанию поднимает кластер и выполняет задачу. Все
остальное время кластер выключен и не тарифицируется. В DataProc нет
такой возможности. Вместо этого можно использовать workflow менеджер
– Apache Airflow. Это более гибкий инструмент контроля выполнения задач,
который позволяет описать workflow в виде направленного ацикличного
графа на языке python.
В Yandex Cloud для создания аналогичного DataBricks workflow, понадобится инстанс с Airflow, сам кластер DataProc и S3 Object Storage
(Рис.2). Перед созданием кластера необходимо:
- разрешить кластеру все необходимые правила для входящего и исходящего трафика (настройка групп безопасности);
- в рабочей подсети включить NAT, чтобы мастер нода смогла взаимодействовать c сервисами Yandex Cloud или хостами в других сетях;
- создать сервисный аккаунт, который будет давать доступ кластеру на создание инстанс-групп при автомасштабировании, на запись и чтение в S3
хранилище, на просмотр мониторинга нод и логирования.
Тестировать задачи и управлять кластером можно через proxy сервисы,
IDE приложения или подключаясь напрямую к нодам с промежуточной
виртуальной машины по ssh (ВМ). Для этого ВМ нужно разместить в той же
подсети и выбрать ту же группу безопасности, что и у кластера DataProc,
дополнительно установив в ней правила трафика.
При конфигурировании Airflow нужно указать подключение к Yandex Cloud
в настройках connections. Существует несколько вариантов подключения:
по OAuth токену и по ключу сервисного аккаунта в виде текста или файла.
Далее можно переходить к созданию графа для запуска кластера,
выполнения PySpark задачи и остановки кластера. В версии Airflow 2.2.3
уже созданы DAG операторы удаления, создания и запуска задач на кластере
Yandex Cloud DataProc. Однако, чтобы в удобном виде сохранять логи о
выполнении задач, можно не удалять кластер, а останавливать его через
API Yandex Cloud. Для этого существует CLI утилита для Linux OS – yc.
Таким образом, вычислительный граф имеет вид, представленный на Рис.3.
Сравнение платформ
Заключение
Переход на Yandex Cloud DataProc при отсутствии опыта использования
DataProc и Airflow может занять некоторое время и ресурсы. Однако в
результате получается более управляемый и гибкий инструмент хранения и
обработки больших данных.