Сегодня рассмотрим, какие улучшения Apache Spark опубликованы в 2023 году и как подать свое предложение по улучшению самого популярного вычислительного движка в стеке Big Data.
Что такое SPIP и как подать свое предложение по улучшению фреймворка
В любом продукте помимо ошибок есть также предложения по улучшению. В Apache Spark они называются SPIP — Spark Improvements Proposals. SPIP используется для значительных изменений, ориентированных на пользователя, или для сквозных изменений, а не для небольших постепенных улучшений. По своей сути SPIP аналогичен требованиям к продукту, однако причиной его регистрации является не острая потребность, а гипотеза, что реализация этой фичи позволит улучшить пользовательский опыт.
Поскольку Apache Spark является проектом с открытым исходным кодом, активно развиваемым сообществом, предложить SPIP может любой пользователь, от разработчика до аналитика данных, главное – обосновать актуальность и выполнимость предлагаемого изменения, ответив на следующие вопросы:
- Что вы предлагаете? Здесь следует кратко, но точно и понятно сформулировать цели изменения в общепринятых терминах без жаргонизмов
- Какую проблему НЕ решает предложение? Ответ на этот вопрос позволит четче очертить границы и содержание SPIP.
- Как рассматриваемая проблема решается сегодня и каковы ограничения нынешней практики?
- Что нового в предложении и почему оно будет успешным?
- Каков эффект от реализации предложения?
- Каковы риски?
- Как много времени это займет?
- Каковы промежуточные и итоговые критерии проверки успешности реализации предложения?
Также автор SPIP может дополнить свой документ несколькими приложениями, описав свое видение изменений API с учетом обратной и прямой совместимости. Дополнительно можно предоставить эскиз проекта для оценки технической осуществимости и ранее рассмотренные альтернативы, которые были отклонены.
Разумеется, отправляя предложения по улучшению проекта Apache Spark, автор соглашается с необходимостью принять участие в его обсуждении и, желательно, в решении затронутого вопроса. После создания SPIP автор должен отправить электронное письмо на dev@spark.apache.org, чтобы уведомить сообщество о своем предложении, после чего начинается обсуждение задачи, созданной в JIRA. Если SPIP слишком мал или, наоборот, представляет собой полноценный инкремент, который должен быть выполнен в рамках обычного процесса разработки, метка SPIP удаляется.
Все обсуждения SPIP происходят на публичном форуме в рамках обсуждения задачи в пространстве JIRA. Любые обсуждения на внешних ресурсах должны быть доступны и запротоколированы. По окончании дискуссии проводится открытое голосование в течение 3-х суток. Решение о принятии SPIP в бэклог продукта принимается по итогам голосования на основе консенсуса и с учетом того, что как минимум один разработчик-член сообщества обязуется реализовать предлагаемые изменения в течение месяца. Иначе SPIP отклоняется с указанием причины отказа. Реализация предложенных улучшений происходит посредством стандартного процесса внесения изменений в код с последующим выпуском релиза и документации.
Чтобы посмотреть список открытых или принятых в работу предложений по улучшению, в поле фильтра JIRA-пространства проекта Spark надо ввести следующий запрос:
project = SPARK AND status in (Open, Reopened, "In Progress") AND (labels = SPIP OR summary ~ "SPIP") ORDER BY createdDate DESC
Этот запрос выведет перечень актуальных предложений по улучшению, отсортированных по дате создания. Рассмотрим некоторые из них более внимательно.
4 недавних предложения улучшить Spark SQL
Например, 30 августа 2023 года предложено добавить в PySpark возможность работать с хранимыми процедурами, которые расширяют стандартный ANSI SQL, позволяя многократно выполнять сложную логику обработки данных. Это предложение направлено на расширение Spark SQL путем введения поддержки хранимых процедур, начиная с Python в качестве процедурного языка. Также пользователи смогут сохранять эти процедуры в каталогах, например, Hive Metastore, для повторного использования в будущем.
Еще одним полезным предложением в августе 2023 года стала идея повысить производительность запросов широковещательного хэш-соединения (BroadcastHashJoin) с помощью ключа соединения на стороне потока для столбцов без разделов. Поскольку ключи BroadcastHashJoin уже доступны до фактической оценки итератора потока, их можно передать в источник данных как SortedSet. Для столбцов без разделов источники данных, такие как Iceberg, уже имеют максимальную/минимальную статистику для столбца, доступную на уровне манифеста, а для таких форматов, как Parquet, эта статистика есть различных уровнях хранения. Переданный SortedSet можно использовать для сокращения использования диапазонов как на уровне драйвера (файлы манифестов), так и на уровне исполнителя при фактическом прохождении групп строк и пр. Если данные хранятся в формате Columnar Batch, отфильтровать отдельные строки на уровне DataSource невозможно, даже при наличии ключей. Однако, на уровне сканирования (ColumnToRowExec) отфильтровать как можно больше строк все же возможно, если запрос включает вложенные соединения. Таким образом, можно сократить количество строк для соединения на более высоких уровнях, что ускорит выполнение многоуровневых вложенных запросов с оператором BroadcastHashJoin.
С PySpark связано еще одно предложение по улучшению, поданное в июне 2023 года. Автор рекомендует создать Python API для источников данных, чтобы разработчики, использующие этот популярный язык программирования, могли создавать собственные источники данных. Также в июне этого же года подано предложение по реализации платформы тестирования PySpark-приложений, чтобы оптимизировать и упростить этот процесс с помощью базового PySpark-класса Test Base и специальных тестовых функций. Это позволит тестам совместно использовать сеансы Spark и автоматизировать проверку кода.
Освойте возможности Apache Spark для разработки приложений аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- Основы Apache Spark для разработчиков
- Потоковая обработка в Apache Spark
- Анализ данных с Apache Spark
- Машинное обучение в Apache Spark
- Графовые алгоритмы в Apache Spark
Источники