DE++ от Валентина – Telegram
DE++ от Валентина
162 subscribers
33 photos
68 links
Буду сюда скидывать статьи и интересные штуки по data engineering и SWE в целом.
Пишу только про то, что сам прочитал

Написать можно в комменты или @valentinoneone
Download Telegram
Возвращаемся к формату докладов

Вообще я хотел что-то глянуть, чтобы понять, что такое Feature Store и зачем оно нужно, когда надо, когда нет и т.д.

В целом, я, конечно, понял, что это такое. Но фоном, потому что доклад не про это.
Он больше про проектирование архитектуры серверной highload штуковины (в нашем случае это FC).
Ответы на вопросы: что мониторить, какие лимиты ставить, точки отказа.

Их история построения своего FC началась в 2015, когда ещё никаких нормальных готовых решений не было. Надо ли сейчас такое самому делать ответа не было.

Я пока не готовился, но выглядит как хороший доклад на подготовку к System Design интервью.

Узнал, что существует Samza (типа Flink от LinkedIn’a)

Более обзорный доклад про FC, чтобы получить на вопросы в начале, надеюсь ещё найду и посмотрю🤔

DE++ от Валентина
Please open Telegram to view this post
VIEW IN TELEGRAM
Spark Native UDF

На прошлых выходных и чуть этих первый раз написал нативные UDF для спарка.
С одной стороны, это легче чем я думал. С другой, это просто огромное поле для экспериментов. Но обо всём по порядку.

Все кто используют спарк сразу узнают про UDF, а потом, что их желательно не использовать, потому что:
1) Catalyst не знает, что в этой UDF происходит и не может это оптимизировать. Больше всего нас интересует Predicate pushdown, но вероятно, есть и ещё какие-то
2) Кодогенерация не работает и добавляет лишние проверки на null и try-catch конструкции
3) Если udf работает со строками, то происходит конвертация из String UTF-8 в UTF-16 и обратно. (Спарк работает c utf-8, а Java с utf16)

А что можно с этим делать?
На самом деле не очень много:
1) Переписать на встроенные функции или на
2) Забить
3) (Вроде как у pySpark тоже есть способы ускорить, но я пока в это не погружался + сомневаюсь, что это будет быстрее последнего варианта)
4) Написать свою "нативную" функцию и встроить внутрь Spark.
Т.е. по сути расширить язык Spark SQL своим новым выражением(Expression), чтобы Catalyst начал понимать что это такое. И подставлять Java код, куда сможет (если вы написали)

Как раз последним я и занимался. Сразу скажу, что пока я миллионы денег на кластерных ресурсах не сэкономил.
Но дико кайфанул пока это делал и экспериментировал

Я написал пару тестовых функций и 1 однострочник из реального кода на проде и просто несколько вечеров сидел, смотрел
1) как java код генерится при nullSafeCodeGen и defineCodeGen,
2) насколько быстрее это работает
3) что меняется в разных версиях спарка
4) работает ли Predicate Pushdown если не писать defineCodeGen, а только eval (да, если нужен только PP то можно не страдать с джавой)
и т.д

Планы:
1) Ускорить один расчёт, который кушоет от 600-800 cores и работает 4-5 часов. (в нём есть 15 udf, но на нативные надо переписать только 2-3)
2) Научится +- честно мерить скорость расчётов в спарке
3) Взять какую-то сложную udf на строк 10-20 на питоне и ускорять всеми способами, постепенно дойти до нативной и померить каждый шаг (очень долгая история, но составит полную картину)

P.S. Не забывайте ставить точки с запятой! В Java они всё ещё нужны!!!💩

Источники:
Единственное видео про это от DB неплохое
Единственная статья на русском по мотивам видео хорошая)
Статья от DataBricks зачем они делают CodeGen в Spark

Простенькая статья с примером UUID и реализацией без кодогена, а через eval
Тоже статья с кодом посложнее и примером BinaryExpression

Статья где показано как правильно регистрировать функцию, чтобы можно было использовать в sql
Примеры функций (порт функций из Postgres и Teradata)
Сорцы спарка - как обычно лучший источник примеров

DE++ от Валентина
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62
DE++ от Валентина
Возвращаемся к формату докладов Вообще я хотел что-то глянуть, чтобы понять, что такое Feature Store и зачем оно нужно, когда надо, когда нет и т.д. В целом, я, конечно, понял, что это такое. Но фоном, потому что доклад не про это. Он больше про проектирование…
Тот обзорный доклад, который хотел посмотреть изначально, но наткнулся уже после первого.

В первые 23 минуты отвечает на все основные вопросы про Feature Store. Потом немного примеров и рекламы продукта. В конце вопросы тоже по делу.

Допускаю, что есть доклад получше, но я уже удовлетворил своё любопытство насчёт FS и на работе у меня работы с ним не предвидится.

Точно не обязателен к просмотру, но хотелось поставить точку в теме.

DE++ от Валентина
DE++ от Валентина
Вот настолько я зарядился этим разговором Решил дать второй шанс VR'у И второй шанс себе, потому что я уже покупал Quest 2 в 2021, чтобы работать в VR и что-то делать для него🤡. В итоге все идеи так и остались идеями, из сделанного только N песен на эксперте…
На этих выходных первый раз попробовал 3d моделирование

Решил следовать традициям и сделал «Hello world» с которого многие начинают - курс про пончик от blenderguru. Только на него ушло 1.5 дня💀

Две причины, почему решил чуток переключиться, выбирайте любую:
1) Не поехать кукухой от проги 7 дней в неделю
2) Делаю это в рамках интереса к VR (но заход очень издалека)

Переключится я-то, конечно, переключился, но интересней всего было работать с инструментом «Geometry Nodes». Который, по сути, из себя представляет no-code функции, которые работают с фигурами в 3d. (Тут это посыпка на пончики, которая генерируется рандомно. Но с их помощью люди суперкрутые вещи делают)

Blender после IntelliJ IDEA - просто космолёт по сложности управления. Но понятно, что Idea я уже кучу лет пользуюсь, а блендером нет.

DE++ от Валентина
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤‍🔥1👏1🦄1
Z-ordering

У меня недавно спросили🌚, знаю ли я Z-ordering и я ответил что нет

А это в итоге оказалось, что 50% я знаю и делал, потому что, это сортировка внутри файла (это база для parquet и orc файлов)
+
вычисление доп. колонок для хитрого размещение файлов, чтобы читать ещё меньше файлов, чем при последовательном чтении метаданных.

Небольшая статья как использовать на Delta Lake

Тоже самое, но для azure Databricks

Статейка с объяснением про саму Space filling curve и Z-Order

Уже чтиво посерьёзней от человека из Databricks с полезными картинками, простой реализацией для понимания как это работает (это всегда круто) и заглядываем во внутренности Delta Lake Spark connector. Советую

Так что расклад такой:
Посмотреть на картинки и кивнуть головой - для ленивых
(1 или 2) и 3 статьи - для практиков
3 и 4 - для любителей кишочков🦾

DE++ от Валентина
🔥4🦄1
DE++ от Валентина
Хороший доклад от Владимира. Примерно на половину повторяет прошлый доклад, но уже про другие SQL-движки. По сути, тоже обзорный, но с большей степенью погружения во внутренности, что конечно же круто и выгодно отличает от других обзорных докладов. Плюс…
Сегодня смотрим вот это😎

Вот узнал, что Владимир Озеров и его коллеги(?) начали делать митапы по Database Internals.

Потом отредачу пост и напишу как оно

Думаю, будет не понятно, но очень интересно

UPD:
Первый доклад - тяжело шёл. Такая серьёзная экранизация CS статьи про подсчёт статистики в DB.
Немного узнал, что происходит при выполнении "ANALYZE".

Второй доклад - немного не то, что я ожидал на митапе по Database Internals.
Но интересно было глянуть на новый подход в разработке, где все действия в коде - это сущности в БД. И от этого супер легко делать логику транзакций в распределённом приложени + ещё пару фичей, включая Time Travel Debugger🙀
СТО и сооснователь этого стартапа Mike Stonebraker если что

https://databaseinternals.timepad.ru/event/2835259/
1
В феврале Кирилл Мокевнин написал пост, что хочет провести экскурсии для студентов колледжа Хекслет. Ну и что-то меня сподвигло написать, что я могу.

И вот сегодня это свершилось!
Хорошо, что в компании этот процесс налажен и от меня нужно было только соединить нужных людей и выступить.

Я рассказывал про фундаментальные знания в ИТ и переход из одной специальности в другую. На примере себя как я перекатился из бекенда в DE.

По сути, это моё первое добровольное выступление перед аудиторией. В целом прошло очень гладко всё. Я собой доволен.

Хардкор посты давайте уже после майских😌

DE++ от Валентина
🔥4👍1
Внеплановый пост

У Энди с коллегами вышла статья с эмпирическим исследованием колоночных форматов данных 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++ от Валентина
🔥4
DE++ от Валентина
Ещё один хардкорный доклад про UDF в Spark. Но тут Андрей Титов идёт со стороны pySpark и дополняет недостающие варианты UDF. Т.е. можно отсортировать все варианты реализации UDF от самого медленного до самого быстрого и будет так: Python UDF (Обычная) …
Apache Arrow

Ну и тогда в догонку обзорный доклад про Apache Arrow

Я как слоупок только недавно решил узнать что это за формат. Хотя он довольно давно уже мелькал то тут, то там в моём поле зрения.

В Spark'е он тоже есть. Как минимум в Pandas UDF и в Spark Connect. Из-за этого и решил разобраться.

Вот тут полный список проектов где он используется

DE++ от Валентина
А ещё сегодня третий митап сообщества Database Internals, куда я точно пойду!

В планах доклады про СУБД Сокол и протокол репликации между кластерами YTsaurus.
Пока не ясно насколько будет полезно/интересно.

Но я давно никуда не ходил. В планах как минимум на умных людей посмотреть, себя показать и может найти кого-нибудь из Spark Over YT🤡

UPD:
В целом по докладам - мимо. Были темы, которые мне пока не интересны. Но зато была хорошая организация и я удостоверился, что не зря курс по бд смотрю.

Запись докладов можно посмотреть тут
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥1
All You Need to Know About PyFlink

Отличная статья по 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 - может быть быть тоже что-то будет полезное
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++ от Валентина
🦄6🔥1