Anscombe's Quartet
540 subscribers
107 photos
2 videos
289 links
Data/ML Engineering. Рассуждения по теме и не по теме.
Download Telegram
Надо правда признать, что Delta Lake - не единственный spark-related формат для хранения данных с update/delete возможностями, ведь помимо него есть так же ACID ORC и Iceberg.

Ситуация чем-то напоминает борьбу между parquet и orc форматами - похожие идеи, но разные имплементации.

Отличный сравнительный обзор по этим файловым форматам сделал мой коллега Michal Gancarski на Spark AI Summit 2019:
https://databricks.com/session_eu19/acid-orc-iceberg-and-delta-lake-an-overview-of-table-formats-for-large-scale-storage-and-analytics
Давненько не писал ничего нового, ибо занимался очередной сменой места работы (что вполне успешно получилось, к слову говоря). В связи с внезапно образовавшимся свободным временем решил плотно заняться изучением относительно нового фреймворка под названием Apache Arrow. Кратко говоря, Arrow - это мультиязычная (на момент времени самыми зрелыми являются API для C++, Java, Python) платформа для работы с данными в памяти.

Ее идея довольно проста - при операциях с большими данными, и в особенности при передаче этих данных через процессы (скажем, Spark-to-Python), современные библиотеки накладывают довольно приличный overhead на сериализацию и десериализацию данных в памяти.

Скажем, если вы хотите применить кастомный UDF в PySpark поверх parquet-файлов в S3, ваши данные пройдут приблизительно следующий путь:
- Java-based Spark прочитает эти данные из S3 и сериализует из в Kryo-формате в памяти
- Java-based Spark сериализует (если она сериализуема, иначе вылезут ошибки сериализации) Python-функцию и прокинет ее на ноды
- Java-based Spark отправит данные на ноды для обсчета
- Данные из локального Java-based Spark процесса будут переданы в Python-based Spark процесс, и каждая запись пройдет полный путь сериализации и де-сериализации
- Python-based Spark процесс обсчитает данные и (после очередной сериализации) вернет их в Java-process

Как видно из этого описания, в процессе будет происходить куча неоптимальных операций сериализации и десериализации.

Создатель библиотеки Pandas, Wes McKinney, а так же многие другие основные контрибьюторы из таких проектов как Apache Hadoop, Apache Spark и Apache Cassandra, очевидно, не могли быть удволетворены таким перерасходом ресурсов и совершенными при имплементации текущего решения архитектурными ошибками, что собственно и послужило стартовой точкой для разработки Apache Arrow.

Пользователи PySpark уже могли сталкиваться с первыми результатами, которые дает использование Apache Arrow, если они использовали pandasUDF API.

Для меня же главный интерес представляет Arrow Flight RPC - это имплементация GRPC-сервера для передачи данных в виде flight-ов - по сути, байтовых массивов Arrow с отличной сериализацией и скоростью передачи. Такой подход позволяет ускорять процесс передачи данных между различными системами в разы.

Почитать про сам Apache Arrow можно на официальном сайте - https://arrow.apache.org/
А конечным пользователям Spark будут интересна оптимизация python-based UDF с помощью Arrow - https://spark.apache.org/docs/latest/sql-pyspark-pandas-with-arrow.html
Я считаю, что одна из очень полезных привычек для инженера - это привычка читать код открытых проектов. Зачастую это помогает освоить новые подходы к написанию решений, или глубже понять инструменты, которыми мы пользуемся каждый день. Я выделил несколько интересных проектов, исходный код которых стоит почитать если вы интересуетесь Big Data / ML инструментами.

Начнем, конечно, с моего любимого Delta формата. Интересные места - то, как работает Optimistic Locking в S3-based среде, имплементация операций Update и Merge, в целом работа с S3-like Filesystem (обратите внимание как имплементированы различные абстракции для транзакционного лога на Azure, S3 и Hadoop-based).

Второй интересный проект, на который я недавно обратил внимание - это находящийся в данный момент в инкубаторе Apache Ratis. Вкратце, Ratis - это гибкая имплементация алгоритма Raft, написанная на Java и выполненная как набор хорошо декомпозированных модулей, позволяющих переиспользовать компоненты этого проекта без импорта огромных зависимостей.

Наконец, последний проект - это написанный на Python mlflow - платформа для автоматизации разработки в сфере ML, с обширным набором интеграций для различных моделей и фрейморков (sklearn, h2o.ai, sagemaker и многие другие). Из примечательного - одним из основных авторов и коммитеров mlflow является Matei Zaharia, один из создателей Apache Spark.

Список, конечно же, не исчерпывающий, и если у вас есть еще на примете какие-нибудь новые и интересные проекты в области Big Data / ML - присылайте, с удовольствием выложу еще подборку.
Apache Spark нынче практически индустриальный стандарт для работы с данными. Как и любой долго развивающийся IT проект с длинной историей, он имеет довольно сложную архитектуру, а некоторые интерфейсы местами сделаны достаточно сложно (а некоторые - наоборот, исключительно гибко и удобно). К сожалению, без более-менее общего понимания того, как работает этот фреймворк, невозможно писать на нем качественные и сложные приложения - зачастую люди натыкаются на базовые ошибки или неверно используют API.

Вот характерный пример, который не так давно встретился в моей практике. У одной из смежных команд стояла задача организовать регулярное чтение данных из S3 path с большим количеством мелких JSON файлов, а затем сохранить результат в обычный parquet format. Первая версия написанной джобы была достаточно тривиальной:


spark.read
.schema(someSchema)
.format("json")
.load(s3path)
.write
.format("parquet")
.partitionBy("date")
.save(anotherS3Path)



Несмотря на кажущуюся простоту задачи, джоба выполнялась в среднем около 9 часов. Первое обвинение, как и положено, полетело в сторону фреймворка - какой же медленный этот ваш Apache Spark!
Догадливый читатель почти наверняка понял, в чем же была проблема - количество файлов.
По умолчанию, спарк будет генерировать по одной партиции на каждый JSON-файл. Это не проблема когда JSON-файлы большие и внутри них много записей, но в приведенном случае общее количество файлов было более 50k и прирастало с течением времени.

Оптимизация в данном случае тривиальна:


sp
ark.read
.schema(someSchema)
.format("json")
.load(s3path)
.coalesce(spark.sparkContext.defaultParallelism)
.write
.format("parquet")
.partitionBy("date")
.save(anotherS3Path)


Coalesce изменяет план вычислений, собирая в кучу разрозненные мелкие файлы, в результате чего создается меньшее количество тасков с большим количеством данных внутри, что позволяет обходить затраты на создание/закрытие отдельных тасков под каждый файл. Результат -одна строчка изменила скорость выполнения этой джобы с 9 часов до 1 часа.

Это я все к чему - для хорошего Data Engineer понимание того, что происходит под капотом Spark является одной из важнейших доменных областей. Вот хорошая дока от одного из коммитеров спарка - она подробно обьясняет все шаги, которые происходят при запуске Spark-приложений:

https://github.com/JerryLead/SparkInternals
Довольно много технического писал, напишу теперь не совсем про технические вещи.

Покорение иностранного языка - штука очевидно сложная. Я думаю, что проблемы с которыми я сталкивался (и сталкиваюсь до сих пор) при изучении языков знакомы многим читателям моего блога. Нехватка времени, мотивации или сложности с запоминанием иностранных слов и грамматики - это стандартная ситуация. Правильно будет сказать и то, что у каждого - свой подход к изучению.

Лично мне очень помогает одна простая активность, которую почему-то редко упоминают в различных гайдах - это перевод песен. Да да, все достаточно просто и тривиально на первый взгляд, но это очень мощный инструмент для расширения лексической базы и качественного запоминания слов. Я время от времени заглядываю на https://lyricstranslate.com чтобы практиковаться. Другая опция - переводить на genius.com, но мне не очень нравится его интерфейс.

Давайте разберем пример - песня IC3PEAK "Сказка", с очень поэтичной строкой - "Тянет сердце грузом в пропасть, каменея изнутри". Согласитесь, с ходу перевести эти предложение с деепричастным оборотом так, чтобы грамотно передать смысл сказанного - нетривиальная задача. Немного поиграв со словами и ориентируясь на комментарии, получился следующий перевод (как по мне, вполне сносный - "My heart pulls me into the abyss like a stone, petrifying from within").

Большой плюс сайта в том, что на каждый сделанный вами перевод можно запросить proofreading от более опытных пользователей сайта. Ваш перевод увидят и иностранцы, заинтересованные в этой песне, и если что-то будет переведено не совсем понятно - попросят вас сделать перевод более полным и понятным, что создаст дополнительный feedback loop.
Сегодня в 23:00 по CET (это 00:00 по Москве), будет стрим-интервью с одним из создателей и ключевых разработчиков Apache Spark и MLflow - Matei Zaharia. Помимо этого, будет Q&A сессия, поэтому если у вас есть вопросы о будущем развития самого фреймворка, индустрии Big Data и ML - стоит заглянуть на стрим и задать их.

https://www.youtube.com/watch?v=rvUxVbpw0TI
Cегодня первый официальный день Spark AI Summit. Как и все эвенты до конца года (видимо), Summit полностью виртуальный. Конференция в этом году очень масштабная - тем, треков и докладов просто огромное количество.

Мне кажется, что наиболее интересные доклады по темам - Distributed DL on GPU, Delta, Mlflow и Apache Arrow. Я думаю что именно этот набор технологий будет обеспечивать edge-technology проекты по ML/Data в ближайшее время. С точки зрения разработки прикладных компонентов под Spark будет еще доклад про Data Source V2 API от DataStax (создатели Cassandra).

Самое время зарегистрироваться, в общем говоря 🙂 - https://databricks.com/sparkaisummit/north-america-2020
Пока тлеющие угольки памяти не подернулись пеплом ностальгии, я спешно дописал следующую часть моих переездных заметок. Собственно о самом переезде там все еще ни слова, зато гораздо больше о процессе собеседований в 2019 году. Конечно ситуация в 2020 внесет свои коррективы и в этот процесс, но карантин же не может быть вечным.

https://telegra.ph/Rocky-Road-to-Berin-Sobesedovaniya-v-Berline---GYG-and-SumUp-p3-06-28

P.S. я довольно давно ничего не писал на великом и могучем (в смысле каких-то больших постов), прошу простить за всевозможные пунктуационные ошибки.
На ближайшем митапе DE or DIE #3, который пройдет в онлайне 16 июля с 19:00 до 21:00 (по мск), вместе с коллегами из Dodo Pizza я буду рассказывать о том, как мы строили пайплайны по стриминговой загрузке данных из Azure MySQL DB в Delta Lake с помощью Spark Streaming на платформе Databricks. Будет много технических деталей и достаточно подробных описаний, конечно же с Q&A секцией в конце.
Регистрируйтесь по ссылке, и заходите в чат сообщества DE or DIE.

https://deordie.timepad.ru/event/1350632/
https://t.iss.one/deordie_chat
This media is not supported in your browser
VIEW IN TELEGRAM
#реклама

От автора: наверное это самая первая реклама на моем канале, но я очень с большим почтением отношусь к МФТИ и считаю его одним из самых сильных вузов страны, поэтому даже немного рад порекламировать их эвенты.

🗣Machine Learning Wednesday - митапы от МФТИ для тех, кто интересуется машинным обучением!

🔥Как оптимизировать нейронные сети и включить ML в процессы компании, не имея для этого размеченных данных! Ближайшие даты:

📅8 июля 17:00 «Компрессия моделей машинного обучения». 📣Выступают: Илья Жариков и Иван Криворотов.
💡Польза: узнаете, как сделать свои модели легче и быстрее, расширив возможные области их применения.
Регистрируйтесь по ссылке https://clck.ru/PV8rB

📅15 июля 17:00 «Использование фреймворка TopicNet для решения задач бизнеса». 📣Выступает: Евгений Егоров.
💡польза: узнаете, как без размеченного датасета и больших бюджетов на вычислительные ресурсы решать практические ML задачи.
Регистрируйтесь по ссылке https://clck.ru/PV8un
Совершенно случайно узнал, что несколько моих репозиториев на GitHub попали в GitHub Archive Program.

Говоря кратко, GAP - это программа, в рамках которой часть репозиториев с GitHub сохраняется на специальные, очень долговечные диски, а затем отправляется на глубину 250 метров в вечную мерзлоту в Арктике. Страничка программы обещает хранить данные около 1000 лет, и передать открытый код будущим поколениям - эдакий Project Zero Dawn.

Прямо скажем, репозитории которые были выбраны из моих - далеко не шедевры программирования, но все же я внутри сильно рад этому, как никак остался в истории 🙂
16 сентября в 10:00 по МСК я буду вести первый вебинар на русском от Databricks.

Расскажу и про концепцию MLOps, и про архитектуры подобных решений, и про возможности нашей платформы - обо всем по порядку.
Будет немного теории и много практики с примером.

Зарегистрироваться можно вот тут.
Мне посчастливилось выступить на DE or DIE #3 (видео здесь), а 1 октября у ребят будет уже 4 по счету митап.
Если можно так сказать, удачное свойство коронавирусной ситуации - это переход многих конференций и митапов в онлайн формат, что дает возможность изучать новое и общаться с другими специалистами не выходя из дома.
Forwarded from Mikhail Kumachev
Коллеги, приветствую!

Мы рады анонсировать очередной митап: DE or DIE #4.
Дата и время: 01.10.2020, начало в 18:00 MSK
Формат: online.

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

Что в программе:
1. «Своя песочница – как сделать кластер для инженера данных», Артем Селезнев, Senior Data Engineer, Сбербанк
2. «Data governance – что это, зачем, и с чего начать», Андрей Вихров, Главный системный аналитик, Связной

Зарегистрироваться можно здесь:
https://deordie.timepad.ru/event/1435939/
Ох и давно же я ничего сюда не писал. Это неспроста - я был активно занят подготовкой своего первого выступления на Data & AI Summit Europe (который бывший Spark Summit Europe) 2020.

Конечно "выступлением" это назвать можно с натяжкой, поскольку все таки конференция онлайновая, как впрочем и любая конференция во времена ковида.
Особенно для меня неприятен тот факт, что этот Data & AI Summit планировался в Берлине, но корона разрушила все возможные планы.

Меня несколько раз спрашивали о том, как попасть на саммит спикером. Никакого секретного ингредиента не существует - у вас должна быть интересная тема, связанная с обработкой данных в целом, Data Engineering или Data Science задачами и подходами к их решению. Вполне достаточно внимательно следить за анонсами и ждать CfP - Call For Proposals, который в этот раз составил почти 2 недели - вполне достаточный промежуток времени чтобы определиться с темой и накидать с десяток слайдов. Комитет саммита рассматривает все заявки, и уже на основе этого рассмотрения выбирает подходящие темы.

Как пройти комитет? Я бы начал с того, что отсмотрел пару последних саммитов. Какие из выступлений показалось вам самыми полезными и интересными? Вот на них и стоит ориентироваться при составлении собственного proposal deck. Другой вариант - быть data-driven и выбрать топ-10 презентаций последнего года по статистике просмотров на официальном канале.

Ну и наконец - как посмотреть саммит? Все просто - он бесплатный и будет доступен как в онлайне, так и в записи. Зарегистрироваться можно по вот этой ссылке.
Forwarded from Инжиниринг Данных (Dmitry Anoshin)
8 июня Иван Трусов - Solution Architect Databricks в Берлине расскажет нам про платформу Databricks и Lakehouse.

У нас запланирована целая серия вебинаров с русскоговорящими архитекторами Databricks, stay tuned!

Хочу рассказать как со всеми ними познакомился. Так как я внедряю Azure Databricks в Microsoft Gaming/Xbox, то спустя какое-то время я устал париться с поддержкой Azure и ждать неделями их бесполезные ответы, я написал директору Azure Databricks в Microsoft и попросил помочь с CI/CD, в итоге наc соединили с командой архитекторов в Берлине и Амстердаме и я рассказал им про datalearn и попросил выступить. Мир тесен!

PS CI/CD pipeline уже работает!
Немного поработал с фреймворком для написания веб-приложений на Python под названием Streamlit - и описал пример такого приложения в отдельной статейке:

https://polarpersonal.medium.com/building-data-visualization-apps-with-streamlit-and-databricks-sql-54e51bb6b0a8
В Get Your Guide в Берлине ищут Data специалистов по трем направлениям:

- BI Engineer
- Senior BI Engineer
- Senior Data Engineer

Почти 3 года назад я не пошел в GyG и считаю что это была большая ошибка (подробнее писал об этом здесь). У ребят и классная команда и отличный технологический стек, и очень интересные задачи.
смигрировал свои заметки о переезде на медиум, и добавил к ним еще одну часть - непосредственно о выборе компании (а так же о критериях этого самого выбора).

https://polarpersonal.medium.com/rocky-road-to-berin-p4-%D0%B2%D1%8B%D0%B1%D0%BE%D1%80-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D0%BD%D0%B8%D0%B8-124d2db7fa5f