Я – Дата Инженер | Евгений Виндюков
4.41K subscribers
335 photos
32 videos
12 files
231 links
💵 Как стать Data Engineer
🗄 Смотри Roadmap в закрепе!
_____________________________
Автор @halltape
Все вопросы по рекламе @k_shredinger
Download Telegram
🧐 Каждый DE точно должен это знать!

Речь идет про

SCD - Медленно меняющимися измерения (Slowly Changing Dimensions)

Если вы сейчас вообще не поняли, что это, то либо вам еще рано, либо прямо сейчас начинайте изучать. Например вы записали в хадуп данные о себе, что у вас 100 рублей на счете. А потом поняли, что хотите больше, а функции update таблицы нет! Нельзя поменять значение, где 100 рублей и поставить 1 000 000. Вам либо стирать таблицу и перезаписывать, либо фильтровать и перезаписывать, либо использовать SCD. Сейчас объясню что это.

SCD позволяет вести историчность строки. Не просто поменять значение в ячейке, а именно контроллировать даты, когда меняется значение. При этом старое значение не удаляется.

Если очень коротко про SCD в HADOOP:
Каждая строка имеет еще один или два столбца с датой. Эта дата обозначает актуальность строки. Например я записал строку 1 июня со значением баланса счета в 100 рублей. А потом 15 июня я выиграл миллион и записал строку с балансом счета в 1 000 100 рублей. Получается у меня две строки с разными датами. И очевидно, что актуальной информацией является строка от 15 июня. При этом я смогу также посмотреть историчность. Это конечно касается Hadoop. Там можно только добавлять данные или стирать вовсе. Поэтому у меня в одной из витрин некоторые строки обновляются именно по такой логике. Есть реально поле, которое содержит в себе дату и чем она позже, тем актуальней данные))

Но по факту в транзакционных системах конечно можно идти дальше и хранить значение, как начала жизни строки, так и конца.
Например у вас два столбца:

start_dt и end_dt


В start_dt пишите 2024-06-01, а в end_dt пишите 9999-12-31. И когда информация обновилась, то вместо 9999-12-31 (столбец end_dt) вы пишите 2024-06-14 (тут именно транзакция). И дальше записываете новую строку, где start_dt пишите 2024-06-15, а в end_dt 9999-12-31.

Таким образом видно, когда строка обновилась (какие были данные и так далее). Добавлять таких строк можно сколько угодно. Плюс в том, что у нас историчность. Минус в том, что куча данных, дополнительных столбцов и стремительно растет нагрузка!

Я рассказал именно про SCD2. Но их всего 5 версий.
SCD1 - это просто изменить значение в ячейке.
SCD3 - это когда у вас хранится предыдущее значение ячейки в соседнем столбце.
SCD4 - это когда основная таблица перезаписывает данные, а старые улетают в отдельную таблицу

Остальные SCD уже являются комбинациями предыдущих и сильно усложняют подход.
Ну кстати мой пример с Хадуп не совсем прям SCD2, но подход похожий. Я просто считаю, что дата окончания актуальности предыдущей строки - это дата добавления новой.
Прикрепляю скрины с Карпов Курсес про SCD. Мне очень нравится, как у них описано это в лекциях!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥14👎21😴1
Чего вам не хватает?

Сейчас настраиваю Boosty!
Там будет все включено:

*️⃣Еженедельные созвоны
*️⃣Доступ к чату (расскажу вам всю поднаготную, будем делиться опытом, материалами, а может даже организуем сходку)
*️⃣Доступ к собесам (что спрашивают, сколько дают денег, какой стек и подводные камни)

Напишите, что еще хотелось бы видеть в подписке?

Я решил, что будет одна цена 300 руб. Мне проще вести один чат и не думать об уровнях подписок.

Если тема будет развиваться, сделаю уровни подешевле. Например только созвоны или только чат.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33🔥8💯3🤡1
🧊 Spark для бабушек!

Итак, на spark пишут код. Он похож на python + sql. Spark нужен для того, чтобы считать очень большие данные. Делает он это распределенно, т.е. на нескольких серверах и параллельно! Pandas например так не умеет, он сразу умрет.

⚫️ Представьте у вас таблица 1Тб. Все Excel, питоны и пандасы уже не могут ее прожевать. Тут приходит на помощь Спарк. Причем это не просто "библиотека", это именно движок. Т.е. мы можем указать Спарку буквально сколько памяти, ядер процессора, степень параллелизма вычислений и многое другое. Мы буквально можем контроллировать все процессы сами. Причем для этого есть даже специальный Веб интерфейс Spark UI. Там можно смотреть, на какой стадии сейчас крутятся данные, на каких серверах, сколько памяти это сжирает и как именно перемещаются данные по сети!

🟡 Так вот вернемся к таблице в 1Тб. Давайте прочитаем эту таблицу и присоединим к ней маленькую табличку в 1Мб. Важно отметить, что Спарк читает эту таблицу с диска, делит ее по своему на части и раскладывает по серверам в оперативную память. Если что-то не помещается, то он может часть сгрузить к себе на диск. Т.е. наша огромная таблица теперь физически раздербанена на куски. Но это позволит дальше делать параллелльные вычисления, которые ускорят процесс до сверхсветовой скорости.

🟡 Теперь представим, что нам надо присоединить таблицу размером в 1Мб. Спарку можно намеренно указать, чтобы он не дербанил эту мелкую таблицу на куски, а взял и отправил по копии на каждый сервер, где лежат куски от раздербаненной большой таблицы. Пусть каждая копия 1Мб локально сджойниться с небольшим кусочком от большой таблицы, а потом результат уже присылай нам на экран. Это позволяет избежать перегонки огромного кол-ва данных по сети во время операций соединений данных.

Конечно, в спарке еще много преимуществ и фишек, но о них в другой раз! Для тех, кто хочет почитать поглубже, гуглите BroadcastJoin, getNumPartitions, repartition, coalesce
Please open Telegram to view this post
VIEW IN TELEGRAM
38🔥14👍6💯2
💡 Проблема мелких файлов для бабушек! Ч1.

Откуда берутся мелкие файлы, почему это плохо и как этого избежать?

🖥 Прочтем Спарком csv файл. Он изначально один. Без разницы какого размера. Спарк загружает этот csv файл, дробит на мелкие кусочки, если происходят разные join с другими таблицами и раскидывает по разным серверам, чтобы потом это все параллельно считать. Можно считать, что он делит таблицу, как колбасу, где один кусок это одна или несколько строк.

🎮 Пусть он там фильтрует, группирует данные, а потом еще считает кол-во строк. Все это время он гоняет строки по сети между серверами. Именно перемешивает. И теперь, когда мы начинаем сохранять данные (без разницы в таблицу, в parquet или csv), то Спарк не склеивает все эти куски в один файл. Он вам выгружает в том виде, в котором они раскидались на последней стадии трансформации.

⬇️ В итоге, если у него после вычислений все разбито на 10 кусков, то и сохранится 10 файлов. В каждом будет свой набор строк. А если 1000, то и сохранит вам тысячу файлов. Чтобы получить один файлик, нужно написать repartition или coalesce перед сохранением.

Repartition может собрать все куски и склеить их в то кол-во, которое вы ему укажите. Можно как уменьшить, так и увеличить кол-во. При этом он старается склеивать на равнозначные кусочки. Это вызывает доп перегонку данных по сети. Но зато у вас нет перекоса, что в одном файле будет 80% данных, а в другом 20%.

Coalesce работает только на уменьшение и старается избегать перемешивания. Если укажите coalesce(1), то спарк с минимальными потерями все склеит в один файлик и сохранит на диск. Но не надо это делать с огромными таблицами. Это к вопросу про чтение данных. Если коротко: Чтение таких таблиц очень долгое.

ℹ️ Вывод. Спарк сохраняет в том виде, в котором вычислял. Ему можно указать, чтобы он склеивал в один кусок или дробил на определенное кол-во частей и сохранял в таком виде на диск. Большие данные склеивать в один файл не стоит.

А вот почему мелкие файлы это именно плохо, об этом в следующем посте!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥4🤣1
🔈 ПОДПИСЫВАЙСЯ НА МОЙ BOOSTY!

https://boosty.to/halltape_data/purchase/2729017?ssource=DIRECT&share=subscription_link

Я оформил Boosty и теперь он доступен по ссылке!

https://boosty.to/halltape_data/purchase/2729017?ssource=DIRECT&share=subscription_link

Что вы получаете по подписке:

⭐️ Чат в Telegram (Расскажу про зарплаты на рынке, вопросы с собесов, красные флаги в команде и компании, солью все полезные материалы многое другое)

⭐️ Созвоны в Discord (Еженедельно созваниваемся и я рассказываю всю правду про профессию без розовых очков, а еще отвечаю на ваши вопросы многое другое) - ЗАПИСИ СОЗВОНОВ БУДУТ ДОСТУПНЫ!

В планах:
⭐️ Видео уроки с обзором тех технологий, о которых никто нормально в сети не рассказывает (например как пользоваться Spark или YARN)
⭐️ Устраивать сходки в МСК, СПБ

300 руб/месяц

Официальный старт планирую 1 июля, но можно залетать уже сегодня.

Ближайший созвон предлагаю уже 6 июля!

Темы для созвонов:
⚫️ Какую зарплату просить на старте?
⚫️ Сколько зарабатывают действующие DE?
⚫️ Расскажи типичный день DE?
⚫️ Как не спалиться в том, что не шаришь? И надо ли?
⚫️ Крутить опыт или нет? Как попасть на первую работу?
⚫️ Пет проекты. Надо или никто не смотрит?
⚫️ Что такое Scrum, kanban, agile? Это вообще нужно?
⚫️ Что надо, а что точно не стоит учить для DE?

И куча еще других тем, которые вы сможете предложить сами!
https://boosty.to/halltape_data/purchase/2729017?ssource=DIRECT&share=subscription_link
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25💩6👍4👎1💯1
🧐 Проблема мелких файлов для бабушек! Ч2.

В прошлом посте я писал про мелкие файлы, которые получаются, если сохранить данные с помощью спарка в том виде, каком есть. Т.е. сохраняем в формате csv и он нам сохраняет не один файл, а много. Для сохранения в один нужно делать либо coalsece, либо repartition или toPandas (гуглите что это!)

Итак. Чем же плохи мелкие файлы. В HDFS все данные хранятся в виде блоков. Ну можно считать, что в виде файлов. Стандартно это 128Мб. Если правда файл загрузим меньшего размера, то файл остается того размера, который он и есть. Но не суть. Факт, что загрузили 500мб csv, он разбился на 4 блока. Каждый такой блочок еще и реплицируется (коппируется) по разным серверам.

Это сделано для того случая, если один из дисков вышел из строя, но данные мы не потеряли, потому что есть еще одна копия. Чисто безопасность. Фактор реппликации ставят стандартно 2 или 3. Но можно ставить любой.

Теперь понимаете, что кол-во файлов с репликами у нас выросло довольно быстро. Вместо того, чтобы хранить один единственный файл, мы храним 4 x 3 = 12 файлов (учитываем фактор реппликации).

В HDFS есть такая система, которая записывает адреса, где лежат все блоки. Нам нужно прочитать файл, а он разбит на блоки. Поэтому кто-то должен понимать, в какой последовательности собирать блоки, чтобы получить нужный файл. Эта штука называется NameNode. Она не хранит сами блоки, а хранит только метаданные. Грубо говоря адреса. Кстати, если эту NameNode уничтожить, то восстановить данные уже не получится, хотя физически на дисках они останутся. Поэтому есть Secondary NameNode, которая собирает слепок каждые несколько минут и является неким подстрахующим звеном.

Короче. Вот у вас 12 блоков, вместо одного. Естественно держать информацию о 12 блоках тяжелее, чем об одном. В какой-то момент память у вас закончится. NameNode это обычный диск и он не резиновый. Даже если у вас петабайты на HDD дисках для данных, то у NameNode может уже не оказаться места. И тогда все встанет.

В HDFS важно следить, чтобы не плодилось много мелких файлов. Спарк при сохранении таблиц как раз часто сохраняет файлы в формате parquet размером с Кб. И получается, что у вас может сохраниться до 20 000 новых файлов, хотя можно было обойтись и 4 000. Т.е. более компактно. Стремиться нужно к размеру блока в HDFS.

Резюмируем:
Много мелких файлов плохо – перегружаем память NameNode и чтение 1млн мелких фалойв это долго.

Один, но большой файл – NameNode радуется, но делать full scan 1Пб данных тоже не разумно. Опять долгое чтение, да и никогда никто не читает весь петабайт)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👌41💯1
Я не могу развидеть это слово)) Оно уже в ДНК)

Распределенное жилье))

господи, храни этот спарк)
😁41😱4🤣2🙈2
Карьерный буст для DWH-разработчиков 👨‍💻

Есть опыт работы от года и желание выйти на новый уровень? На интенсиве в Открытых школах Т1 ты прокачаешь скилы и сможешь попасть в сильную ИТ-команду 🔝

Т1 признан крупнейшей ИТ-компанией в России по версии RAEX 2023, в портфеле 70+ востребованных продуктов и услуг, которые развивают уже 23 000+ ИТ-профессионалов, и мы всегда в поиске новых талантов.

Лучшие из выпускников бесплатного интенсива получат оффер в команды разработки финтех-решений, ИТ-продуктов, облачных сервисов, развития ИИ-решений, интеграции и консалтинга, а также уникальный карьерный фаст-трек до мидла.

⌛️ Быстрое обучение: 1 месяц.
💻Гибкий формат: все этапы онлайн, занятия по вечерам.

Покоряй бигтех — подай заявку до 24 июля!

Старт интенсива — 29 июля.

Реклама. Информация о рекламодателе
💩12🔥11👍2🍌2🫡2
👀 Все есть в интернете, но ничего нет!

Когда я только начинал учиться, я находил курсы по python, sql и даже по Hadoop. Но абсолютно ничего не находилось по Spark.
И нет, у меня не было желания смотреть tutorial от Индусов. Это треш! Я не переношу их акцент.

Я хотел доступного объяснения, без душноты на русском языке и чтобы это было для начинающих, а не для ученых! Я отчасти веду канал именно для этого! Чтобы и самому разобраться и другим помочь!

Поэтому ближе к концу лета, а может и вовсе в сентябре я планирую записать урок по Spark. Это будет видос на youtube. Точно такой же, как вот этот про HADOOP (HDFS) или вот этот про docker. И если вы не видели, то вот этот про data engineering. Подписывайтесь!

Плюс у меня есть крутая идея. Я сделаю пробный видос про Spark для всех, кто подписан на мой бусти. Там я в прямом эфире покажу, как работает Spark и что он из себя представляет. Это будет видос-тестовый прогон. Его я сделаю в 27-28 июля!

Вы сможете в прямом эфире задать любой вопрос по Spark!

Поэтому кому не терпится побыстрее уже познакомиться со Spark, то подписывайтесь на мой бусти. Я покажу вам, как работают DE со Spark на работе.
А на что не смогу ответить, то войдет в финальный чистовой ролик уже на Youtube! Но уже осенью!

🅱️🩸🩸🩸🩸
Ссылка на BOOSTY

https://boosty.to/halltape_data
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38❤‍🔥5👍51💩1
👩‍💻 UNION vs UNION ALL

Взял из курса на степике по DE

https://stepik.org/lesson/893154/step/1?auth=login&unit=898095

В целом для совсем нулевого уровня курс норм. Но если вы уже шарите за нормальные формы и знаете отличие OLTP vs OLAP, тогда не стоит.
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥3👏1
🎸 Москва!

Можем встретиться на IT пикнике, если есть желание))
Если кто был уже, отпишитесь насколько прикольно или интересно. Я в целом иногда бываю на таких мероприятиях. Как минимум можем все увидеться вживую, а не сидеть в своих домах за компуктерами.

https://it-picnic.ru

Не реклама!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🤔4😱2
😘 Если ничего не делать, то точно не получится!

Это комменты на ютубе к моему видосу про то, кто такие data engineer

Например стать айтишником или пробиться со своим треком в чарты – две разные цели. И там и там есть ошибка выжившего.

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

А в айти понятный путь. Делаешь резюме, ходишь на собес. Удачно проходишь собес. Если не зовут на собес, значит корректируешь так резюме, чтобы оно попадало в фильтр. И проходишь эту игру поэтапно. Здесь четкие правила игры и есть ОКЛАД. Это ваш гарантированный доход по ТК РФ.

Не сдаемся и работаем! Те, кто двигаются, те доходят до своей цели!
Please open Telegram to view this post
VIEW IN TELEGRAM
25👍11🔥5
🔄 Пример крутого пет проекта!

ССЫЛКА НА YOUTUBE
ССЫЛКА НА GITHUB

Чувак в реальном времени поднимает сервисы в docker compose и пишет код в airflow. На мой взгляд, если просто повторите за ним и придумаете сами несколько источников, то можно смело говорить, что у вас есть опыт работы с инструментами.

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

Я рекомендую просто перепечатывать за ним, параллельно закидывая в cht gpt то, что вам непонятно. А еще лучше, если вы будете парсить данные с тех сайтов, которые вам интересны, чтобы было не скучно!

А я пошел смотреть другие видосы у него. Это прям находка!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36👍74
➡️ Смело забивайте на задачи!

Объявление для тех, кто решает сейчас задачи на степике по python и так далее.

Если вы видите тупорылые задачи на шахматы, на матрицы или в описании задачи вообще описана какая-то история (типа олимпиадная задача), то смело пропускайте это днище и не засирайте себе мозг!

На работе нет таких задач! DE работает с таблицами, строками, списками, словарями и кортежами большую часть времени. У нас данные. У нас нет матриц или шахмат. У нас даже сортировка уже зашита внутрь мозгов питона, спарка и скл.

Не слушайте умников, которые вам затирают про БАЗУ. Типа надо сначала разобраться, как это работает на низком уровне, а только потом уже можно приступать к более сложному.

Решайте то, что решается. Сели за задачу. Если сидите над ней уже 2 часа, смело пропускайте и идите дальше. Вполне вероятно, что вы к ней сможете вернуться уже, когда получите оффер. Но вам тогда будет уже наплевать. А время идет и возраст уходит.

Пожалуйста, будьте прагматичнее и срезайте путь, как можете. В нашей жизни часто играет большую роль удача, а не умение решать олимпиадные задачи!

У меня кипит! 👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥86👍12😁43👏2
🔤🔤🔤🔤🔤 Стрим по Spark!

Уже завтра я буду вести стрим по казино spark!

🟡 Мы соберем самую настоящую витрину данных
🟡 Покажу некоторые проблемы при расчете, а также обсудим их оптимальное решение
⚫️ Если останется время, то запустим скрипт за несколько дней и подключим логгирование

Это пример реальной задачи на работе.

Важно:
Это будет тестовый прогон в реальном времени. Можно будет задать любые вопросы по коду, настройке и так далее.
Чистовик я выпущу только осенью на своем Youtube канале (будет доступно всем бесплатно)
Более того, данные и сам скрипт я добавлю в свой проект на github, поэтому любой из вас сможет повторить это у себя дома!

Проводить стрим буду на своем Boosty!
Подписывайся
, если не хочешь пропустить!

🅱️🩸🩸🩸🩸
https://boosty.to/halltape_data
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33👍52👎1👏1