gram news
Аватар канала rzv Data Engineering

rzv Data Engineering

@rzv_de

Авторский канал о том, как я понимаю инжиниринг данных. Объясняю термины, best practice, делюсь описанием рабочих задачек. См закрепы Рассчитан на новичков в DE и инженеров до Senior. Чат: t.me/+jtQ1tjvNUtwzN2My По вопросам: @razvodov_de_mentor

2,990подписчиков

Открыть канал

Последние посты

  • rzv Data Engineering

    22 сент., 09:00изменён

    Объектное хранилище в эпоху быстрых данныхОбъём данных, с которыми нужно работать, растёт ежедневно. Стандартных решений уже не хватает для задач ИИ и аналитики. Большие объёмы данных нужно не только хранить, но и быстро записывать и читать.В MWS Cloud Platform мы построили объектное хранилище не только на привычных HDD-дисках, но и на NVMe. На вебинаре покажем, какие сценарии работы это открывает и как меняет привычные подходы.Подключайтесь! Обсудим: ✅ Чем классы хранения MWS Object Storage отличаются от привычных ✅ В каких сценариях новый тёплый класс проявляет себя лучше всего ✅ Преимущества и слабые места в разных сценариях работы📆 7 октября в 14:00 (мск)Зарегистрироваться
    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering
  • rzv Data Engineering

    22 сент., 07:48изменён

    Как равномерно размазывать данныеЧасто в командах, где я работал, проверяли равномерность распределения уже после вставки. А сам ключ распределения/шардирования выбирали скорее интуитивно.🔸 Будущее распределение можно посчитать, ничего не создавая и не перекладывая. Шард выбирается по остатку от деления значения ключа на число шардов, и этот остаток считается обычным SELECT. Удобно это проверить в ClickHouse через cityHash64().Представим что у нас есть табличка с продажами. Допустим, что у нас 5 шардов.SELECT cityHash64(order_id) % 5 AS target_shard, count() AS orders FROM orders GROUP BY target_shard ORDER BY target_shard;Если ключ заказов создаётся на источнике равномерно, мы скорее всего увидим 5 примерно одинаковых строк, с разницей до 10% (моя субъективная оценка равномерности).🔸 Допустим, типов заказа может быть 3. Тогда получим следующий запрос:SELECT
    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering
    486921Открыть в Telegram
  • rzv Data Engineering

    18 сент., 10:05

    #рекламаКак разобраться в технологии глубже, чем по документации и чужим бенчмаркам?Допустим, вы изучаете Lakehouse и хотите понять, в каких задачах такой подход оправдан по сравнению с классическим DWH. Интересно не только то, как настроить Trino и Iceberg, но и почему архитектура устроена именно так, что проверяли исследователи и насколько их выводы применимы к вашей нагрузке.scid.ai — ИИ-платформа, которая объединяет весь исследовательский путь в одном приложении: от вопроса и поиска научных статей до анализа и подготовки материала с проверяемой доказательной базой.Начать можно с запроса: «В чём различия Lakehouse и классического DWH?».Дальше можно: — отобрать подходящие статьи и сохранить их в библиотеку; — посмотреть связи между публикациями на графе; — задать вопросы по выбранным работам: какие объёмы данных, типы запросов и метрики использовали авторы; — собрать таблицу
    856видео511Открыть в Telegram
  • rzv Data Engineering

    15 сент., 13:56

    Лаба по шардированному ClickHouse вышла в релиз🔸 Вы своими руками соберёте реплицированные и распределённые таблицы, загрузите в них реальные данные. Также пройдёте через то, что может произойти при переходе с одиночного ClickHouse на шардированный: - перекос от неудачно выбранного ключа - перенос таблицы на кластер - запросы, которые не падают и при этом отвечают некорректно - особенности вставки и чтения при работе с распределёнными таблицами🔸 Лаба рассчитана на тех, кто уже пишет SQL в ClickHouse. Колоночное хранение, MergeTree и синтаксис здесь не разбираются - только то, как меняется работа DE и какие грабли можно собрать при добавлении шардов. Версия CH: 26.7.Время прохождения 4-6чПодробнее по ссылкеp.s. По анонсам буду точнее в следующий раз, "на неделе" не получилось)
    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering
  • rzv Data Engineering

    3 сент., 09:05

    Ловите новости по учебным стендам🔸 На неделе планирую релиз шардированного Clickhouse 2х2. В нём расскажу про основы переноса таблиц с моно-кластера на шардированный CH с точки зрения дата инженера. Покажу на практике работу шардов и реплик. В нескольких задачах раскрою материализованные представления и проекции. Ну и маленько по витринам пройдёмся. Всё будет на той же платформе "материалы слева - СУБД клиент и UI справа".На учёную степень по клику или навыки уровня DBA не претендую. Приглашаю ознакомиться тех DE, у кого не было опыта с Clickhouse в принципе или с его кластерной версией)🔸 Потом скорее всего будет мини-Hadoop с "плановыми поломками" одной дата ноды каждые полчаса. Подумал, что надо устойчивые системы показывать в стрессовых ситуациях) Для тех, кто планирует работать в больших банках или других компаниях с петабайтными хранилищами.🔸 Понемногу работаю над
    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering
    1,49016111Открыть в Telegram
  • rzv Data Engineering

    17 авг., 09:53изменён

    Заканчиваю полировать, завтра с утра можно будет пробовать) За эту неделю получилось вылечить многие баги и несостыковки, добавить полезные фичи, улучшить Quality of Life, значительно расширить покрытие лабы. Но наверняка что-то ещё осталось из проблем, будем
  • rzv Data Engineering

    15 авг., 06:39

    В какие темы и технологии было бы интересно погрузиться с практикой? Пиши в комментариях, буду выбирать популярные идеи и формировать бэклог)
  • rzv Data Engineering

    14 авг., 17:58

    В общем, по поводу розыгрыша билета на конференцию и обсуждения под удалённым постом с рекламой:Нечасто провожу эти розыгрыши, и досадно что именно в этот раз довольно крупно накосячил со своей стороны.Как было по порядку: • В комментариях в конкурсе приняли участие два человека - Даниил и Сергей. • Я провёл розыгрыш, в котором победителем рандом выбрал Сергея, написал ему об этом под постом - но потом обнаружил, что не поставил OBS на запись. • Подумал, что доказательство всё-таки нужно, записал ещё один раз, где рандом выбрал Даниила. • Написал Даниилу об этом, и решил подчистить прошлое сообщение, где победитель - Сергей. • Сергей указал мне на эту несправедливость в комментах, и потом я пытался объясниться, но услышать друг друга не получилось. • Даниил пошёл навстречу и отказался от своего билета, чтобы в итоге он достался Сергею.Я написал организатору конференции, в
  • rzv Data Engineering

    14 авг., 14:02

    Анонс новых учебных стендов по DE Я стремлюсь найти такие способы обучения технологиям, которые помогают разобраться и понять материал. Сейчас работаю над интерактивными стендами в стиле kodekloud, но для дата инженеров. Это такие лабы на 3-5 часов, где
    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering
  • rzv Data Engineering

    8 авг., 14:35изменён

    Опыт миграции небольшого стека с Docker compose на Kubernetes 4/4🔸 Что это даёт, по крайней мере для меняПрежде всего - интеграцию с готовой платформой для "прогерских лабораторных работ", где k8s-манифесты это пререквизитВозможность горизонтального масштабирования за пределы одной ВМ на будущееБолее удобный способ из одного контейнера управлять состоянием другого, например для сервиса выдачи доступов (в docker-compose стеке есть bind-mount /var/run/docker.sock, но идёт вместе с уязвимостью в виде root права на запуск любых контейнеров)🔸ВыводыДля собственных проектов пока всё ещё не вижу смысла в k8s, как ни пытаюсь разглядеть. Всё в конечном итоге запускается на виртуальных машинах, за которые платишь. Даже в managed сервисе вроде "yandex cloud managed k8s" идёт отдельная аренда за месяц CPU/RAM/disk конкретных ВМ.Пока продолжаю всей душой любить Docker compose.Поделит
  • rzv Data Engineering

    8 авг., 14:33изменён

    Опыт миграции небольшого стека с Docker compose на Kubernetes 3/4Отдельно — Ingress:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: trino spec: rules: - host: trino.example.com http: paths: - path: / pathType: Prefix backend: service: name: trino port: number: 8080
  • rzv Data Engineering

    8 авг., 14:33изменён

    Опыт миграции небольшого стека с Docker compose на Kubernetes 2/4Что стало на k8s🔸 Во-первых, сколько абстракций добавилось: - Deployment — чтобы кластер сам следил за нужным состоянием пода - Secret — API-объект с RBAC-управлением доступами на чтение и живой ротацией без передеплоя - Service — чтобы у пода был стабильный сетевой адрес: свой внутренний IP он теряет при каждом пересоздании - Ingress — чтобы к сервису можно было подключиться снаружи; по умолчанию кластер находится в полностью изолированном окружении "без окон и дверей" - ConfigMap — набор key-value пар параметров🔸 Во-вторых, какие строчки конфига во что превратились: - image / container_name -> Deployment, containers[].image — без изменений - depends_on -> нативного аналога нет, приходится писать небольшой initContainer, который сам проверяет, что сервис-зависимость запущен и можно стартовать текущий - сеть по
  • rzv Data Engineering

    8 авг., 14:31изменён

    Опыт миграции небольшого стека с Docker compose на Kubernetes 1/4В посте попробую разобраться, в чём k8s может быть лучше чем Docker compose для инфры небольшого проекта. Пост больше по DataOps, но вам вроде такое иногда заходит. Вначале отладил сервис и "лабу" для своих менти на привычном окружении, теперь оборачиваю в "коробку" и готовлюсь открывать доступ для многих. Заодно решил потренироваться в переносе сервиса на kubernetes. Это те же контейнеры, должно быть несложно, правда?)🔸 БылоВот весь блок trino: из compose, как есть:trino: image: trinodb/trino:483 container_name: trino restart: unless-stopped volumes: - ./trino/etc:/etc/trino:ro ports: - "8085:8080" environment: AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-} healthcheck:
  • rzv Data Engineering

    8 авг., 14:30изменён

    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering
  • rzv Data Engineering

    8 авг., 14:27

    Анонс новых учебных стендов по DEЯ стремлюсь найти такие способы обучения технологиям, которые помогают разобраться и понять материал. Сейчас работаю над интерактивными стендами в стиле kodekloud, но для дата инженеров. Это такие лабы на 3-5 часов, где можно знакомиться с технологиями через практику.Пользователь на платформе сможет создавать конфиги, запускать команды в терминале, обращаться к СУБД через SQL клиент, заходить на UI сервисов и тд. Опыт приближен к техническому взаимодействию с системой, как это бывает на работе.Планирую в августе зарелизить первый стенд по Lakehouse: Trino + Iceberg + S3 - ждите новостей)Закладываю опыт работы в американском стартапе, где ещё в 2024 удалось поработать с Lakehouse
    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering
  • rzv Data Engineering

    25 июл., 14:02изменён

    Вопрос на подумать-порассуждать. Что делать, если меняется первичный ключ?Например, ты строишь CRM систему на основе телеграмма. И в качестве колонки, которая "однозначно определяет аккаунт", выбираешь телеграм никнейм. Запускаешь систему в прод, всё хорошо работает какое-то время. А потом ты узнаёшь, что некоторые клиенты поменяли свой телеграм никнейм. То есть теперь есть две разных строчки, которые на самом деле один клиент.
    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering
  • rzv Data Engineering

    30 июн., 16:16

    Как BI-аналитики воспринимают оптимизацию таблиц в СУБД под тяжёлые запросыhttps://rzvde.pro/clickhouse_query_optimization_demoи такой пересчёт происходит при каждом обращении к СУБД, например Clickhouse: • выбор другого отчётного периода • фильтрация по конкретным значением • изменение полей агрегации(симуляция, реальная база не пострадала)
    rzvde.proЗачем оптимизировать запросы в ClickhouseНаглядная демонстрация со стороны BI-аналитиков
  • rzv Data Engineering

    19 июн., 08:45

    Дата инженерный опыт работы с кубером 3/3🔸 Выбор Executor под задачуПоявляется выбор между CeleryExecutor и KubernetesExecutor. CeleryExecutor держит постоянный пул воркеров, которые ждут работу из очереди через брокер вроде Redis. Воркеры всегда “прогреты”, поэтому задача стартует почти сразу, и это выгодно при большом числе коротких частых операций. Плата за такой режим в том, что воркеры занимают ресурсы даже в простое.KubernetesExecutor поднимает отдельный под под каждую задачу и удаляет его после завершения. Старт такого пода занимает секунд 40, поскольку нужно подтянуть образ и дождаться планировщика, и полезная работа начинает выполняться далеко не сразу. Зато задача получает изоляцию, возможность занять ограниченные ресурсы под тяжёлую операцию и высвободить по выполнении.p.s. существует комбинированный CeleryKubernetesExecutor, который распределяет задачи по очередям.
    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering
  • rzv Data Engineering

    19 июн., 08:44

    Дата инженерный опыт работы с кубером 2/3🔸 Где лежат логи и как до них добратьсяПод в кубере это атомарная единица деплоя. Под с задачей живёт ровно столько, сколько идёт её отработка, а после завершения исчезает вместе со своей файловой системой и локальными логами. Поэтому логи приходится выносить наружу, чаще всего в S3/MinIO или в систему агрегации логов вроде Loki или ElasticSearch. Логи подтягиваются в интерфейс Airflow из удалённого хранилища, и визуально всё работает как обычно. Однако, если нужно обработать логи программно или провести “глобальный поиск”, для этого нужно перейти во внешнюю систему, а не подключаться по ssh к виртуальной машине как раньше.🔸 Связь кубера с внешним миром через ingress и egressK8s описывает сети, и без настройки сетей приложение будет существовать “в вакууме”, недоступное для подключения извне и общения с “внешним миром”. Для сегодняшней
    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering
  • rzv Data Engineering

    19 июн., 08:43

    Дата инженерный опыт работы с кубером 1/3Я не буду вам сейчас долго писать про архитектуру или масштабируемость - это всё непонятным языком уже описали до меня. Покажу с точки зрения дата инженера на примере работы с Airflow.🔸 Kubernetes (k8s, кубер) - это инфраструктурная платформа для развёртывания сервисов и описания их ресурсов через код. То есть где-то в гит репозитории лежит набор файликов, которые обрабатываются кубером и превращаются во всевозможные сервисы, сети, параметры серверных приложений и тд. Например, все компоненты Airflow: • webserver • scheduler • workers • executor • trigerrer • metadata base (postgres)🔸 Но что это значит для пользователя сервиса, то есть для дата инженера? Разберу четыре темы: 1. расположение логов и доступ к ним 2. ingress/egress - подключение к источникам и таргетам 3. выбор Executor между Celery и Kubernetes для разных задач 4. python
    Иллюстрация к посту канала rzv Data EngineeringИллюстрация к посту канала rzv Data Engineering