В феврале Кирилл Мокевнин написал пост, что хочет провести экскурсии для студентов колледжа Хекслет. Ну и что-то меня сподвигло написать, что я могу.
И вот сегодня это свершилось!
Хорошо, что в компании этот процесс налажен и от меня нужно было только соединить нужных людей и выступить.
Я рассказывал про фундаментальные знания в ИТ и переход из одной специальности в другую. На примере себя как я перекатился из бекенда в DE.
По сути, это моё первое добровольное выступление перед аудиторией. В целом прошло очень гладко всё. Я собой доволен.
Хардкор посты давайте уже после майских😌
DE++ от Валентина
И вот сегодня это свершилось!
Хорошо, что в компании этот процесс налажен и от меня нужно было только соединить нужных людей и выступить.
Я рассказывал про фундаментальные знания в ИТ и переход из одной специальности в другую. На примере себя как я перекатился из бекенда в DE.
По сути, это моё первое добровольное выступление перед аудиторией. В целом прошло очень гладко всё. Я собой доволен.
Хардкор посты давайте уже после майских😌
DE++ от Валентина
🔥4👍1
Внеплановый пост
У Энди с коллегами вышла статья с эмпирическим исследованием колоночных форматов данных Parquet и ORC.
Из быстрого и интересного:
1) У ORC’a более агрессивное сжатие, из-за этого он работает хуже на быстрых дисках
2) Есть расхождения в реализациях форматов на разных языках. Java поддерживает новейшие функции оптимизации, но из-за JVM они бесполезны.
Все ключевые выводы на последней картинке.
Ставьте 🔥, если хотите, чтобы я всё бросил и прочитал статью полностью (ничего обещать не могу🌚)
Пост Энди в твиттуре
Сама статья
Ссылка на код
DE++ от Валентина
У Энди с коллегами вышла статья с эмпирическим исследованием колоночных форматов данных Parquet и ORC.
Из быстрого и интересного:
1) У ORC’a более агрессивное сжатие, из-за этого он работает хуже на быстрых дисках
2) Есть расхождения в реализациях форматов на разных языках. Java поддерживает новейшие функции оптимизации, но из-за JVM они бесполезны.
Все ключевые выводы на последней картинке.
Ставьте 🔥, если хотите, чтобы я всё бросил и прочитал статью полностью (ничего обещать не могу🌚)
Пост Энди в твиттуре
Сама статья
Ссылка на код
DE++ от Валентина
🔥10
DE++ от Валентина
Spark Native UDF На прошлых выходных и чуть этих первый раз написал нативные UDF для спарка. С одной стороны, это легче чем я думал. С другой, это просто огромное поле для экспериментов. Но обо всём по порядку. Все кто используют спарк сразу узнают про UDF…
Ещё один хардкорный доклад про UDF в Spark. Но тут Андрей Титов идёт со стороны pySpark и дополняет недостающие варианты UDF.
Т.е. можно отсортировать все варианты реализации UDF от самого медленного до самого быстрого и будет так:
Python UDF (Обычная)
↓
Pandas UDF
↓
Scala UDF
↓
Spark Expression (Native UDF)
И в докладе затрагиваются первые 3.
Сначала объясняется почему в целом тормозит PySpark и более подробно про udf на питоне.
(Тут было супер интересно, потому что сейчас в команде всё на Scala и я даже не задумывался о том, как Python код запускается на JVM машине и почему это тааак медленно)
Немного затронул Apache Arrow и Pandas UDF
После рассказывает как писать Scala UDF, чтобы их можно было удобно использовать из PySpark. И как делать сложную логику в udf, например сходить в бд.
DE++ от Валентина
Т.е. можно отсортировать все варианты реализации UDF от самого медленного до самого быстрого и будет так:
Python UDF (Обычная)
↓
Pandas UDF
↓
Scala UDF
↓
Spark Expression (Native UDF)
И в докладе затрагиваются первые 3.
Сначала объясняется почему в целом тормозит PySpark и более подробно про udf на питоне.
(Тут было супер интересно, потому что сейчас в команде всё на Scala и я даже не задумывался о том, как Python код запускается на JVM машине и почему это тааак медленно)
Немного затронул Apache Arrow и Pandas UDF
После рассказывает как писать Scala UDF, чтобы их можно было удобно использовать из PySpark. И как делать сложную логику в udf, например сходить в бд.
DE++ от Валентина
YouTube
DE or DIE #5. Андрей Титов – Использование Scala UDF в PySpark
Материалы всех наших митапов: https://deordie.com
Наш чат в Telegram: https://news.1rj.ru/str/deordie_chat
Новые события сообщества DE or DIE: https://deordie.timepad.ru/events/
Автор доклада: Андрей Титов, Senior Spark Engineer, NVIDIA
В своем докладе я поделюсь…
Наш чат в Telegram: https://news.1rj.ru/str/deordie_chat
Новые события сообщества DE or DIE: https://deordie.timepad.ru/events/
Автор доклада: Андрей Титов, Senior Spark Engineer, NVIDIA
В своем докладе я поделюсь…
🔥4
DE++ от Валентина
Ещё один хардкорный доклад про UDF в Spark. Но тут Андрей Титов идёт со стороны pySpark и дополняет недостающие варианты UDF. Т.е. можно отсортировать все варианты реализации UDF от самого медленного до самого быстрого и будет так: Python UDF (Обычная) …
Apache Arrow
Ну и тогда в догонку обзорный доклад про Apache Arrow
Я как слоупок только недавно решил узнать что это за формат. Хотя он довольно давно уже мелькал то тут, то там в моём поле зрения.
В Spark'е он тоже есть. Как минимум в Pandas UDF и в Spark Connect. Из-за этого и решил разобраться.
Вот тут полный список проектов где он используется
DE++ от Валентина
Ну и тогда в догонку обзорный доклад про Apache Arrow
Я как слоупок только недавно решил узнать что это за формат. Хотя он довольно давно уже мелькал то тут, то там в моём поле зрения.
В Spark'е он тоже есть. Как минимум в Pandas UDF и в Spark Connect. Из-за этого и решил разобраться.
Вот тут полный список проектов где он используется
DE++ от Валентина
YouTube
Игорь Селивёрстов — Apache Arrow. В погоне за скоростью
Подробнее о Java-конференциях:
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
Apache Arrow — это векторный формат данных, а также набор инструментов для хранения, обработки и передачи данных в векторном формате. Arrow…
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
Apache Arrow — это векторный формат данных, а также набор инструментов для хранения, обработки и передачи данных в векторном формате. Arrow…
А ещё сегодня третий митап сообщества Database Internals, куда я точно пойду!
В планах доклады про СУБД Сокол и протокол репликации между кластерами YTsaurus.
Пока не ясно насколько будет полезно/интересно.
Но я давно никуда не ходил. В планах как минимум на умных людей посмотреть, себя показать и может найти кого-нибудь из Spark Over YT🤡
UPD:
В целом по докладам - мимо. Были темы, которые мне пока не интересны. Но зато была хорошая организация и я удостоверился, что не зря курс по бд смотрю.
Запись докладов можно посмотреть тут
В планах доклады про СУБД Сокол и протокол репликации между кластерами YTsaurus.
Пока не ясно насколько будет полезно/интересно.
Но я давно никуда не ходил. В планах как минимум на умных людей посмотреть, себя показать и может найти кого-нибудь из Spark Over YT
UPD:
В целом по докладам - мимо. Были темы, которые мне пока не интересны. Но зато была хорошая организация и я удостоверился, что не зря курс по бд смотрю.
Запись докладов можно посмотреть тут
Please open Telegram to view this post
VIEW IN TELEGRAM
databaseinternals.timepad.ru
Database Internals Meetup #3 (офлайн + онлайн): архитектура СУБД SoQoL, и протокол репликации YTsaurus / События на TimePad.ru
Третий митап российского сообщества разработчиков СУБД и распределенных систем. Обсудим архитектуру новой российской СУБД SoQoL и новый протокол межкластерной репликации данных YTsaurus.
❤🔥1
All You Need to Know About PyFlink
Отличная статья по PyFlink, которая полностью оправдывает своё название.
Тут вместе идёт теория и практика.
По теории рассматриваются: базовые понятия Flink, архитектура, различие Streaming и Table API и тд.
По практике есть куски кода, как правильно запускать Flink и советы, чтобы вариант на питоне был не сильно хуже варианта на Java.
У них же есть курсы по стримингу и Table API. Я посмотрел половину одного курса и могу сказать, что они короткие, но очень плохие.
- Посмотреть видео из середины на нужную тему нельзя, они заблокированы
- Девушка читает скрипт под картинки, потом нудный тест на модуль
- 0 практики
Не советую. Тот самый момент, когда лучше потратить время на доку.
В следующем посте допишу мои субъективные ощущения от работы с PyFlink и как это я мог отвлечься от познания глубин Спарка.
Ссылка на отстойные курсы
DE++ от Валентина
Отличная статья по PyFlink, которая полностью оправдывает своё название.
Тут вместе идёт теория и практика.
По теории рассматриваются: базовые понятия Flink, архитектура, различие Streaming и Table API и тд.
По практике есть куски кода, как правильно запускать Flink и советы, чтобы вариант на питоне был не сильно хуже варианта на Java.
У них же есть курсы по стримингу и Table API. Я посмотрел половину одного курса и могу сказать, что они короткие, но очень плохие.
- Посмотреть видео из середины на нужную тему нельзя, они заблокированы
- Девушка читает скрипт под картинки, потом нудный тест на модуль
- 0 практики
Не советую. Тот самый момент, когда лучше потратить время на доку.
В следующем посте допишу мои субъективные ощущения от работы с PyFlink и как это я мог отвлечься от познания глубин Спарка.
Ссылка на отстойные курсы
DE++ от Валентина
🔥2
Сегодня стартует Data+AI Summit
Кто планирует смотреть?
Могу позволить себе только бесплатную секцию, которая будет 12-13 июня🤧
Интересно всего пара докладов
Точно хочу:
Data warehousing performance, scale and security with Databricks SQL - перформанс, это значит сразу смотрим
меньше:
Introduction to Mosaic AI: How Databricks Simplifies Your GenAI Journey - очень много про этот мозаик говорят, интересно понять есть ли что-то полезное в этом
How to create a holistic customer view to drive performance and revenue - может быть быть тоже что-то будет полезное
Кто планирует смотреть?
Могу позволить себе только бесплатную секцию, которая будет 12-13 июня🤧
Интересно всего пара докладов
Точно хочу:
Data warehousing performance, scale and security with Databricks SQL - перформанс, это значит сразу смотрим
меньше:
Introduction to Mosaic AI: How Databricks Simplifies Your GenAI Journey - очень много про этот мозаик говорят, интересно понять есть ли что-то полезное в этом
How to create a holistic customer view to drive performance and revenue - может быть быть тоже что-то будет полезное
DE++ от Валентина
All You Need to Know About PyFlink Отличная статья по PyFlink, которая полностью оправдывает своё название. Тут вместе идёт теория и практика. По теории рассматриваются: базовые понятия Flink, архитектура, различие Streaming и Table API и тд. По практике…
Ладно, на самом деле тут не очень много рассказывать
В этом квартале меня добавили на полставки в проект, который призван упростить написание стриминг приложений на PyFlink. А-ля, такая обертка на декораторах поверх Flink’a.
Пока не ясно насколько проект жизнеспособен. Но я смог попробовать Flink и Kafka. И теперь точно не туплю при написании декораторов. Так что я уже доволен.
В целом, ощущения положительные, очень удобно писать map’ы и flatMap’ы над потоком. Всё просто и понятно. Но только до тех пор, пока нужно только что-то стандартное. Если надо сделать, то чего в Python API нет, то придётся делать уже больше, чем если бы писать только на Java.
Например:
Мне из сообщения {“id”, “field1”, “field2”} нужно было “field1” сделать ключом в сообщении в кафке. У Java API можно просто написать лямбду, которая это делает. В реализации PyFlink такое не предусмотрено.
И тут уже придётся делать больше, чем просто написать такое же на Java.
Для лучшего варианта без костылей и лишних трансформаций, пришлось сделать:
1) Вытащить из сорцов флинка, код сериализации
2) Подправить пару строчек
3) Упаковать в Jar и написать обёртку для Python на Py4j.
Это не особо трудно, но это надо будет сделать. А если вы такое можете сделать, то может и сразу на Java писать?)
Лучше только сделать PR в сам Flink, но извини, моё сердце пока занято спарком🫀
Доп:
Сравнение скорости PyFlink.
В статье выше написано, что если использовать только стандартные вещи из PyFlink Table API, то перформанс будет прямо таким же, как и Flink на Java, но мы это не замеряли.
По стримингу же всё грустно. Внутренние замеры показали, что простейшая перекладка из кафки в кафку с/без простой трасформации на pyFlink в 10 медленнее. На истинность не претендую, но похоже на правду, учитывая, сколько там всего сериализуется туда-сюда.
DE++ от Валентина
В этом квартале меня добавили на полставки в проект, который призван упростить написание стриминг приложений на PyFlink. А-ля, такая обертка на декораторах поверх Flink’a.
Пока не ясно насколько проект жизнеспособен. Но я смог попробовать Flink и Kafka. И теперь точно не туплю при написании декораторов. Так что я уже доволен.
В целом, ощущения положительные, очень удобно писать map’ы и flatMap’ы над потоком. Всё просто и понятно. Но только до тех пор, пока нужно только что-то стандартное. Если надо сделать, то чего в Python API нет, то придётся делать уже больше, чем если бы писать только на Java.
Например:
Мне из сообщения {“id”, “field1”, “field2”} нужно было “field1” сделать ключом в сообщении в кафке. У Java API можно просто написать лямбду, которая это делает. В реализации PyFlink такое не предусмотрено.
И тут уже придётся делать больше, чем просто написать такое же на Java.
Для лучшего варианта без костылей и лишних трансформаций, пришлось сделать:
1) Вытащить из сорцов флинка, код сериализации
2) Подправить пару строчек
3) Упаковать в Jar и написать обёртку для Python на Py4j.
Это не особо трудно, но это надо будет сделать. А если вы такое можете сделать, то может и сразу на Java писать?)
Доп:
Сравнение скорости PyFlink.
В статье выше написано, что если использовать только стандартные вещи из PyFlink Table API, то перформанс будет прямо таким же, как и Flink на Java, но мы это не замеряли.
По стримингу же всё грустно. Внутренние замеры показали, что простейшая перекладка из кафки в кафку с/без простой трасформации на pyFlink в 10 медленнее. На истинность не претендую, но похоже на правду, учитывая, сколько там всего сериализуется туда-сюда.
DE++ от Валентина
🦄6🔥1
Пока досматриваю последние интересующие доклады c Data+AI Summit, расскажу про лучший доклад про реализацию кастомного DataSource для Spark.
В докладе нет примеров с кодом, а показана общая идея и какие классы DataSource APi нужно реализовать.
(Код для конкретного источника всё равно слишком специфичный и в доклад это не уместишь)
Так что полезно будет даже если не планируется писать свой DS, но хочется понять как примерно спарк работает с любым источником данных.
Весь код в общей репо SPYT (Spark Over YT)
live coding DS от Яцека с кодом
DE++ от Валентина
В докладе нет примеров с кодом, а показана общая идея и какие классы DataSource APi нужно реализовать.
(Код для конкретного источника всё равно слишком специфичный и в доклад это не уместишь)
Так что полезно будет даже если не планируется писать свой DS, но хочется понять как примерно спарк работает с любым источником данных.
Весь код в общей репо SPYT (Spark Over YT)
live coding DS от Яцека с кодом
DE++ от Валентина
YouTube
Как подключить к Apache Spark проприетарный источник данных / Александра Белоусова (Яндекс.Go)
Приглашаем на конференцию Saint HighLoad++ 2025, которая пройдет 23 и 24 июня в Санкт-Петербурге!
Программа, подробности и билеты по ссылке: https://highload.ru/spb/2025
________
HighLoad++ Весна 2021
Крупнейшая профессиональная конференция для разработчиков…
Программа, подробности и билеты по ссылке: https://highload.ru/spb/2025
________
HighLoad++ Весна 2021
Крупнейшая профессиональная конференция для разработчиков…
👍4
DE++ от Валентина
Сегодня стартует Data+AI Summit Кто планирует смотреть? Могу позволить себе только бесплатную секцию, которая будет 12-13 июня🤧 Интересно всего пара докладов Точно хочу: Data warehousing performance, scale and security with Databricks SQL - перформанс,…
Досмотрел Data+AI Summit 2024!
Выбирал кандидатов на просмотр так: все доклады уровня "Advanced" и Трек "Data Engineering and Streaming" уровня "Intermediate"
Формат:
Ссылка на доклад - ссылка на ютуб (чтобы смотреть без впн) - почему показалось интересно
Посмотрел
Data Warehousing Performance, Scale and Security with Databricks SQL - Видео - Доклад для Data Platform инженеров и оптимизации нацелены не на конкретный Spark App, а на dwh в целом: использовать Proton, Liquid Clustering. Следить за теми кто плохие запросы пишет и тд.
🔥Variant Data Type - Making Semi-Structured Data Fast and Simple - Видео - Про новый тип Variant. Новая вещь. Доклад с тех подробностями, картинками - кайф.
Optimizing MERGE Performance using Liquid Clustering - Видео - оптимизация хранение файлов. Сравнение Partitioning/Z-ordering и Liquid Clustering, Deletion Vectors, Bloom Filter
👍🏻Introducing the New Python Data Source API for Apache Spark - Видео - Data Source API на Python. Понял зачем его добавили. Интересно, посмотрим насколько это приживётся.
Databricks Streaming: Project Lightspeed Goes Hyperspeed - Видео - анонс Real-time стриминга и новые возможности Structured Streaming
👍🏻Drastically Reducing Processing Costs with Delta Lake - Видео - Повторение про Z-ordering и DV
Узнал когда и зачем нужно смотреть на вкладку Thread Dump
Сделали проект с примерами проблемных мест производительности spark-perf-hikes
Benchmarking Data and AI Platforms: How to Choose and use Good Benchmarks - Видео - про бенчмарки для Data платформ.
🔥Deep Dive into Delta Lake and UniForm on Databricks - Видео - про то что такое Delta Lake, основные идеи как это работает и конкретные фичи (опять Liquid Clustering), UniForm. Как Hadoop-Enjoyer игнорировал это поры до времени игнорил всё это и доклад хорошо подошел для входа.
👍🏻Architecture Analysis for ETL Processing: CPU vs GPU - Видео - Про ускорение ETL на GPU с помощью RAPIDS. Подробнее, но давненько было на Moscow Spark #10.
Глянул
What’s Next for the Upcoming Apache Spark 4.0? - Видео - что будут в Spark 4.0. Много повторений, но очень интересно про PySpark UDF Unified Profiler
Unit Tests: How to Overcome Challenges in Structured Streaming - Видео - У меня маловато опыта в стриминге. Поэтому было интересно
Ten-Times Easier Development Using Databricks Connect and Serverless Spark - Видео - Разработка через Databricks Connect прямо на кластере. Зависть к эти облачникам🤧
SQL Programming on Databricks - Видео - интересные возможности Databricks SQL
Sponsored by: Datafold | Shifting Data Quality to the Left: Automating Data Testing on Databricks - Видео - крутая вещь, запускать код над датасетами при каждом PR. Сам хотел такое костылить на первой DE работе.
Sponsored By: Dagster Labs | Dev/Stage/Prod is the Wrong Pattern for Data Pipelines - Видео - версионирование своих дата пайплайнов.
An In Depth Look at the New Features of Apache Spark 3.5 - Видео - Что нового в Spark 3.5. Много полезного для PySpark.
DE++ от Валентина
Выбирал кандидатов на просмотр так: все доклады уровня "Advanced" и Трек "Data Engineering and Streaming" уровня "Intermediate"
Формат:
Ссылка на доклад - ссылка на ютуб (чтобы смотреть без впн) - почему показалось интересно
Посмотрел
Data Warehousing Performance, Scale and Security with Databricks SQL - Видео - Доклад для Data Platform инженеров и оптимизации нацелены не на конкретный Spark App, а на dwh в целом: использовать Proton, Liquid Clustering. Следить за теми кто плохие запросы пишет и тд.
🔥Variant Data Type - Making Semi-Structured Data Fast and Simple - Видео - Про новый тип Variant. Новая вещь. Доклад с тех подробностями, картинками - кайф.
Optimizing MERGE Performance using Liquid Clustering - Видео - оптимизация хранение файлов. Сравнение Partitioning/Z-ordering и Liquid Clustering, Deletion Vectors, Bloom Filter
👍🏻Introducing the New Python Data Source API for Apache Spark - Видео - Data Source API на Python. Понял зачем его добавили. Интересно, посмотрим насколько это приживётся.
Databricks Streaming: Project Lightspeed Goes Hyperspeed - Видео - анонс Real-time стриминга и новые возможности Structured Streaming
👍🏻Drastically Reducing Processing Costs with Delta Lake - Видео - Повторение про Z-ordering и DV
Узнал когда и зачем нужно смотреть на вкладку Thread Dump
Сделали проект с примерами проблемных мест производительности spark-perf-hikes
Benchmarking Data and AI Platforms: How to Choose and use Good Benchmarks - Видео - про бенчмарки для Data платформ.
🔥Deep Dive into Delta Lake and UniForm on Databricks - Видео - про то что такое Delta Lake, основные идеи как это работает и конкретные фичи (опять Liquid Clustering), UniForm. Как Hadoop-Enjoyer игнорировал это поры до времени игнорил всё это и доклад хорошо подошел для входа.
👍🏻Architecture Analysis for ETL Processing: CPU vs GPU - Видео - Про ускорение ETL на GPU с помощью RAPIDS. Подробнее, но давненько было на Moscow Spark #10.
Глянул
What’s Next for the Upcoming Apache Spark 4.0? - Видео - что будут в Spark 4.0. Много повторений, но очень интересно про PySpark UDF Unified Profiler
Unit Tests: How to Overcome Challenges in Structured Streaming - Видео - У меня маловато опыта в стриминге. Поэтому было интересно
Ten-Times Easier Development Using Databricks Connect and Serverless Spark - Видео - Разработка через Databricks Connect прямо на кластере. Зависть к эти облачникам🤧
SQL Programming on Databricks - Видео - интересные возможности Databricks SQL
Sponsored by: Datafold | Shifting Data Quality to the Left: Automating Data Testing on Databricks - Видео - крутая вещь, запускать код над датасетами при каждом PR. Сам хотел такое костылить на первой DE работе.
Sponsored By: Dagster Labs | Dev/Stage/Prod is the Wrong Pattern for Data Pipelines - Видео - версионирование своих дата пайплайнов.
An In Depth Look at the New Features of Apache Spark 3.5 - Видео - Что нового в Spark 3.5. Много полезного для PySpark.
DE++ от Валентина
🔥2👍1
DE++ от Валентина
Ещё один хардкорный доклад про UDF в Spark. Но тут Андрей Титов идёт со стороны pySpark и дополняет недостающие варианты UDF. Т.е. можно отсортировать все варианты реализации UDF от самого медленного до самого быстрого и будет так: Python UDF (Обычная) …
Продолжение истории оптимизации UDF'ок.
После пробного варианта написания нативной UDF, я решил применить эти знания уже для настоящего сценария. И стал ходить по людям в компании и спрашивать если ли у них какие-то медленные UDF'ки, которые я мог бы улучшить.
И нашёлся неплохой вариант у одной команды. Они используют небольшую библиотеку siphash-java для того чтобы захешировать ключи таблиц, которые являются чувствительной информацией и сохранять результат в Clickhouse для пользователей у которых нет доступа к таким данным.
Сразу была понятно, что потенциал к ускорению небольшой, потому что код уже написан на Java и добавляется в Spark как JavaUDF.
Но я решил, что это приемлемо, потому что хотел пройти путь доведения такой оптимизации до продовского состояния, а не практиковать перевод Python в Scala/Java код. Так, чтобы можно было не стыдно показать и передать другим разработчиками.
И потом описать этот путь в статье, потому что статьи как реализовать Expression уже есть. А вот как это лучше тестировать, как проверить что оно действительно работает быстрее и т.д. нет и приходится смотреть кучу исходников.
Разумеется, быстренько набросать код для статьи затянусь на 1.5 месяца с кучей проблем.
Пришлось кое-где срезать углы, чтобы вообще не забросить это дело.
Все технические детали будут позже в статье и постах, но пока пара быстрых выводов:
- Работает в 2x быстрее хотя это тот же вызов Java метода
- Я теперь могу такую штуку за полдня накидать😎
- Интересней всего было играться с бенчмарками
- Приятней всего - добавлять имя в девелоперов
- Если смотреть кучу часов в кодобазу - она становится понятней👀
- Spark сессия в тестах это какой-то кОпец
- Кросс компиляция в 2 измерениях даже в Sbt - непростое дело (я не смог)
Код, который я старался максимально приблизить к исходникам Spark'а и мне не стыдно его показать:
https://github.com/valentinp17/spark-siphash
DE++ от Валентина
После пробного варианта написания нативной UDF, я решил применить эти знания уже для настоящего сценария. И стал ходить по людям в компании и спрашивать если ли у них какие-то медленные UDF'ки, которые я мог бы улучшить.
И нашёлся неплохой вариант у одной команды. Они используют небольшую библиотеку siphash-java для того чтобы захешировать ключи таблиц, которые являются чувствительной информацией и сохранять результат в Clickhouse для пользователей у которых нет доступа к таким данным.
Сразу была понятно, что потенциал к ускорению небольшой, потому что код уже написан на Java и добавляется в Spark как JavaUDF.
Но я решил, что это приемлемо, потому что хотел пройти путь доведения такой оптимизации до продовского состояния, а не практиковать перевод Python в Scala/Java код. Так, чтобы можно было не стыдно показать и передать другим разработчиками.
И потом описать этот путь в статье, потому что статьи как реализовать Expression уже есть. А вот как это лучше тестировать, как проверить что оно действительно работает быстрее и т.д. нет и приходится смотреть кучу исходников.
Разумеется, быстренько набросать код для статьи затянусь на 1.5 месяца с кучей проблем.
Пришлось кое-где срезать углы, чтобы вообще не забросить это дело.
Все технические детали будут позже в статье и постах, но пока пара быстрых выводов:
- Работает в 2x быстрее хотя это тот же вызов Java метода
- Я теперь могу такую штуку за полдня накидать
- Интересней всего было играться с бенчмарками
- Приятней всего - добавлять имя в девелоперов
- Если смотреть кучу часов в кодобазу - она становится понятней
- Spark сессия в тестах это какой-то кОпец
- Кросс компиляция в 2 измерениях даже в Sbt - непростое дело (я не смог)
Код, который я старался максимально приблизить к исходникам Spark'а и мне не стыдно его показать:
https://github.com/valentinp17/spark-siphash
DE++ от Валентина
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5👍1
Ладно, за месяц меня не уволили, я не сбежал, так что можно рассказывать. Я перешёл в новую компанию - Appodeal. Это AdTech, конкретно занимается Real-Time Bidding.
Новая обстановка примерно по всем всему:
Раньше работал только в российском бигтехе -> теперь в компании ~250 человек
Раньше был on-premise -> теперь облако
Раньше гибрид или офис -> теперь полная удалёнка по миру
Так же теперь в команде есть англоязычные и часть созвонов на инглише🤵
По технологиям ситуация такая:
Большинство данных из кафки
Batch: Dagster, S3 -> Databricks Spark -> AWS S3 -> Druid
Streaming: KSQL -> Druid -> Pivot
Основные мотивации я бы назвал 3:
- Возможность работать откуда угодно
- Поработать с облаками
- Ветка платится теперь зелёная😳
Пока делится техническими деталями не получается. Вникаю и тушу пожары😱
Новая обстановка примерно по всем всему:
Раньше работал только в российском бигтехе -> теперь в компании ~250 человек
Раньше был on-premise -> теперь облако
Раньше гибрид или офис -> теперь полная удалёнка по миру
Так же теперь в команде есть англоязычные и часть созвонов на инглише
По технологиям ситуация такая:
Большинство данных из кафки
Batch: Dagster, S3 -> Databricks Spark -> AWS S3 -> Druid
Streaming: KSQL -> Druid -> Pivot
Основные мотивации я бы назвал 3:
- Возможность работать откуда угодно
- Поработать с облаками
- Ветка платится теперь зелёная
Пока делится техническими деталями не получается. Вникаю и тушу пожары
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16💊2
Два доклада про дата скетчи
Я бы объяснял датаскетчи как применение в обработке данных на потоке тех же идей вероятности и статистики, что и в Bloom Filter, благодаря которым мы, например, можем посчитать distinct без шаффла или обрабатывать данные в окне только один раз.
Первый от создателя библиотеки Apache DataSketches. Теоретический, с разбором проблем стандартных способов и свойств дата скетчей.
Второй, на который я ходил на хайлоаде ирл. Скорее более практический. С показом, как примерно скетчи работают, сравнение разных алгоритмов. Даже бенчмарки есть, но уровня "trust me, bro" на одном компьютере и без исходников. Но мне всё равно понравилось, хотя по лицу на записи не скажешь🥱
DE++ от Валентина
Я бы объяснял датаскетчи как применение в обработке данных на потоке тех же идей вероятности и статистики, что и в Bloom Filter, благодаря которым мы, например, можем посчитать distinct без шаффла или обрабатывать данные в окне только один раз.
Первый от создателя библиотеки Apache DataSketches. Теоретический, с разбором проблем стандартных способов и свойств дата скетчей.
Второй, на который я ходил на хайлоаде ирл. Скорее более практический. С показом, как примерно скетчи работают, сравнение разных алгоритмов. Даже бенчмарки есть, но уровня "trust me, bro" на одном компьютере и без исходников. Но мне всё равно понравилось, хотя по лицу на записи не скажешь
DE++ от Валентина
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
A Production Quality Sketching Library for the Analysis of Big Data
In the analysis of big data there are often problem queries that don't scale because they require huge compute resources to generate exact results, or don't parallelize well. Examples include count distinct, quantiles, most frequent items, joins, matrix computations…
👍2🥰1
DE++ от Валентина
По последним неделям можно было заметить, что я смотрел сильно меньше докладов. Это всё потому, что я немного отвлёкся на другое. На Spark! А точнее на его исходный код и попытки закотрибьютить хоть что-нибудь. И сегодня приняли мой первый Pull Request! Это…
Если кто-то хотел тоже попробовать закомитить в Spark то сейчас хорошая возможность. И что-то полезное, а не поменять имя ошибки😂
Max Gekk, которого я немного доставал вопрсами и тегал для ревью написал SPIP на новый тип TIME, нарезал на задачи реализации и бросил клич на общую почту. А раз отвечал, значит человек хороший☺️
Может даже я могу что-то подсказать, но самый кайф, конечно, пытаться разобраться самому
https://issues.apache.org/jira/browse/SPARK-51162 - общая таска
https://issues.apache.org/jira/browse/SPARK-51402 - подзадача где надо добавить тесты на UDFку. Звучит как хорошая первая задача
DE++ от Валентина
Max Gekk, которого я немного доставал вопрсами и тегал для ревью написал SPIP на новый тип TIME, нарезал на задачи реализации и бросил клич на общую почту. А раз отвечал, значит человек хороший
Может даже я могу что-то подсказать, но самый кайф, конечно, пытаться разобраться самому
https://issues.apache.org/jira/browse/SPARK-51162 - общая таска
https://issues.apache.org/jira/browse/SPARK-51402 - подзадача где надо добавить тесты на UDFку. Звучит как хорошая первая задача
DE++ от Валентина
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰2👍1
Почему плохо писать много .withColumn в Spark
Если коротко:
На каждое использование .withColumn() создаётся новая версия Dataframe на этапе "Analyzed Logical plan" и Catalyst'у приходится обходить каждую.
Да, это влияет только на скорость построенния плана (в физическом плане уже лишних Project Node нет), но это полезно помнить, если у вас много преобразований или стриминг.
Так что, используем .withColumns(), если Spark >= 3.3
Или .select() c .selectExpr()
Если длинно:
Вот тут в статье всё расписано. И ещё создание плана замеряли через RuleExecutor, я не знал, полезно.
How withColumn Can Degrade the Performance of a Spark Job?
И ещё посты Sem Sinchenko где я в первый раз эту оптимизацию и увидел: Раз, Два. Он и flake плагин написал для pySpark, который эти проблемы находит. И картинку в посте тоже он нарисовал🤌🏻
DE++ от Валентина
Если коротко:
На каждое использование .withColumn() создаётся новая версия Dataframe на этапе "Analyzed Logical plan" и Catalyst'у приходится обходить каждую.
Да, это влияет только на скорость построенния плана (в физическом плане уже лишних Project Node нет), но это полезно помнить, если у вас много преобразований или стриминг.
Так что, используем .withColumns(), если Spark >= 3.3
Или .select() c .selectExpr()
Если длинно:
Вот тут в статье всё расписано. И ещё создание плана замеряли через RuleExecutor, я не знал, полезно.
How withColumn Can Degrade the Performance of a Spark Job?
И ещё посты Sem Sinchenko где я в первый раз эту оптимизацию и увидел: Раз, Два. Он и flake плагин написал для pySpark, который эти проблемы находит. И картинку в посте тоже он нарисовал🤌🏻
DE++ от Валентина
🔥6❤1
Когда .coalesce() хуже .repartition()?
Не самое сакральное знание, но точно ещё не все знают, так что лучше напишу
Стандартный вопрос на собесе "чем .coalesce() отличается от .repartition()" и со стандартным ответом, что .coalesce() не делает полный шаффл, а только "склеивает" партиции вместе, подразумевая, что coalesce лучше и надо стараться использовать его.
НО
из-за плохо задокументированной возможности спарка прокинуть его ниже по плану, coalesce может сильно уменьшить параллелизм тех операций, которые вы не хотели. filter, как самый главный пример.
Вот тут челики из AirBnb это описывали
И в комментах у Валеры тоже это упоминали
Так что аккуртнее делайте .coalesce(1) перед записью файлика.
Может быть когда-нибудь я раскапаю как и почему так сделано, но точно не сегодня. Пойду снова на полгода пропаду, сильно не теряйте💋
DE++ от Валентина
Не самое сакральное знание, но точно ещё не все знают, так что лучше напишу
Стандартный вопрос на собесе "чем .coalesce() отличается от .repartition()" и со стандартным ответом, что .coalesce() не делает полный шаффл, а только "склеивает" партиции вместе, подразумевая, что coalesce лучше и надо стараться использовать его.
НО
из-за плохо задокументированной возможности спарка прокинуть его ниже по плану, coalesce может сильно уменьшить параллелизм тех операций, которые вы не хотели. filter, как самый главный пример.
Вот тут челики из AirBnb это описывали
И в комментах у Валеры тоже это упоминали
Так что аккуртнее делайте .coalesce(1) перед записью файлика.
Может быть когда-нибудь я раскапаю как и почему так сделано, но точно не сегодня. Пойду снова на полгода пропаду, сильно не теряйте💋
DE++ от Валентина
👍9👌1