Блог

Вопросы о big data, на которые нам часто отвечают — прямо и по делу

Вопросы, которые постоянно возникают вокруг пайплайнов Spark, dbt и Flink — те же самые, что сформировали то, что реально проверяет движок правил opti-pipe.

Читать на:
Фильтр по тегу:
Фильтр по уровню:

SparkСредний уровень

Как развернуть задачу Spark — client mode или cluster mode?

Флаг --deploy-mode в spark-submit решает, где запускается драйвер — а client mode незаметно привязывает выживание продакшен-задачи к тому, что бы ни отправило её.

SparkSenior

Как развернуть кластер Spark — Kubernetes, YARN или EMR — и что реально меняется?

Движок исполнения Spark идентичен независимо от того, что планирует его executor'ы. Реальный вопрос — кто владеет провижинингом и восстановлением после сбоев: Spark, вы или вендор.

FlinkСредний уровень

Как развернуть задачу Flink — session mode или application mode?

Session mode и application mode расходятся ровно в одном измерении: может ли плохо ведущая себя задача утянуть с собой другие. Вот когда каждый из них правильный выбор по умолчанию.

FlinkSenior

Как развернуть кластер Flink на Kubernetes через нативную интеграцию?

Нативная интеграция Flink с Kubernetes значит, что сам Flink обращается к Kubernetes API, чтобы управлять своими подами TaskManager — значимо другой деплой, чем просто запуск Flink в контейнере.

dbtJunior

Как развернуть dbt так, чтобы он реально запускался по расписанию в проде?

dbt run просто выполняется один раз и завершается — у dbt нет мнения о планировании. Вот что реально берут на себя dbt Cloud, свой оркестратор и обычный cron.

dbtJunior

Как настроить profiles.yml в dbt так, чтобы креды никогда не попадали в git?

dbt намеренно разделяет «что строить» и «куда подключаться» на два файла. Вот как profiles.yml и env_var() должны держать креды вне git.

dbtJunior

Как настроить sources.yml в dbt, чтобы устаревшие данные падали громко, а не тихо?

Модель может отработать чисто на таблице, которая не обновлялась три дня. Вот как sources.yml и dbt source freshness ловят это, вместо того чтобы молчать.

FlinkСредний уровень

Как настроить state backend и хранилище чекпоинтов Flink перед выходом в прод?

Настройки Flink по умолчанию годятся, чтобы быстро запустить задачу в dev, но не чтобы пережить реальный рестарт с реальным объёмом состояния. Вот как на самом деле работают state backend и хранилище чекпоинтов.

FlinkСредний уровень

Как настроить стратегии рестарта Flink, чтобы сбой не зациклился навсегда?

Поведение рестарта Flink по умолчанию рассчитано на редкий сбой, а не на по-настоящему сломанный деплой. Вот чем на самом деле различаются fixed-delay, exponential-delay и failure-rate.

SparkСредний уровень

Как настроить dynamic allocation в Spark с нуля, а не просто подкрутить постфактум?

Одного spark.dynamicAllocation.enabled=true обычно недостаточно. Вот предпосылка про shuffle-сервис и границы min/max, которые реально заставляют dynamic allocation работать.

SparkJunior

Как читать Spark event log без открытия Spark UI?

Spark UI — это просто визуализация того же файла. Вот что в нём реально есть, и однострочная команда jq, которая даст те же цифры быстрее.

dbtJunior

Что на самом деле внутри dbt run_results.json, и почему его стоит читать напрямую?

Каждый запуск dbt пишет этот файл в target/, открываете вы его или нет. В нём уже есть ответ на вопрос «какая модель медленная».

SparkСредний уровень

Почему утилизация кластера Spark низкая, хотя задача успешно завершается?

«Завершилось без ошибок» и «мы использовали кластер, за который платим» — два разных утверждения. Вот как понять, о каком из них на самом деле речь.

SparkСредний уровень

Когда broadcast join в Spark реально помогает, а когда — вредит?

Broadcast join — это ставка на то, что одна сторона join'а достаточно мала. Когда ставка верна — это самый быстрый join в Spark, когда нет — самый быстрый способ уронить driver по OOM.

SparkJunior

Проблема мелких файлов: почему ваша Spark-задача тратит больше времени на I/O, чем на вычисления

Задача может упираться в I/O, но выглядеть упирающейся в вычисления на любом дашборде, который отслеживает только CPU — узкое место реально в открытии файлов, а не в чтении байтов.

FlinkJunior

Как читать экспорт метрик Flink, и какие цифры реально важны?

API метрик Flink возвращает десятки счётчиков на таск. Вот короткий список, который реально отвечает «всё ли в порядке», и почему остальное может подождать.

FlinkSenior

Чекпоинтинг во Flink: почему он тихо отказывает, и как настроить интервал и таймаут

Checkpoint, который тихо истекает под нагрузкой, не роняет задачу — он просто оставляет вам гораздо более широкое окно восстановления, чем вы думаете.

dbtСредний уровень

Инкрементальные модели dbt: когда «incremental» тихо превращается в full refresh

Изменение схемы или неверно настроенный on_schema_change может незаметно вынудить полную пересборку таблицы при каждом запуске — без ошибки, просто гораздо более долгий запуск и больший счёт.

SparkSenior

Спекулятивное выполнение в Spark: страховка или скрытый множитель расходов?

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

InfraСредний уровень

Память driver'а против памяти executor'а: это не одна и та же задача по настройке

У OOM драйвера и OOM executor'а почти нет общих причин, хотя первое, что все пробуют — одно и то же: увеличить настройку памяти.

dbtJunior

ClickHouse теперь на платформе dbt — что это реально значит для вашего пайплайна

ClickHouse стал первым партнёрским v2-адаптером на платформе dbt, работающим на новом движке Fusion на Rust — вот что реально доступно уже сегодня.

SparkJunior

Почему моя Spark-задача вдруг стала медленнее без изменений в коде?

В девяти случаях из десяти дело не в коде. Дело в данных, кластере или конфигурации, которая незаметно перестала соответствовать одному из них.

SparkСредний уровень

Как выбрать правильное число shuffle-партиций, памяти executor'а и количество ядер?

Универсального правильного ответа нет, но есть разумная отправная точка — и, что важнее, способ понять, что ваши текущие цифры неверны.

Spark и FlinkСредний уровень

Почему возникают ошибки OutOfMemory и как их на самом деле исправить?

«Просто увеличьте память executor'а» решает проблему примерно в половине случаев и впустую тратит деньги в другой половине. Вот как понять, какой у вас случай.

СтоимостьСредний уровень

Как снизить счёт за Databricks/EMR/Glue, ничего не сломав?

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

SparkСредний уровень

Как обнаружить и исправить перекос данных (data skew)?

Перекос невидим в агрегированных метриках и очевиден в метриках по отдельным задачам — нужно просто смотреть в правильное место.

ИнфраструктураSenior

Какой размер кластера и политика автомасштабирования подходят для этой нагрузки?

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

dbtСредний уровень

Как ускорить модели dbt и снизить расходы на Snowflake/BigQuery?

В проекте dbt время выполнения и счёт за хранилище — почти одна и та же метрика под разными именами: исправление одного обычно исправляет и другое.

FlinkSenior

Как правильно настроить parallelism и backpressure в потоковой задаче Flink?

Backpressure — не баг, который нужно устранить, а Flink, честно указывающий вам, где реальное узкое место в пайплайне.

ЭксплуатацияJunior

Почему пайплайн работает в dev, но падает или тормозит в prod?

Dev-окружение обычно не врёт напрямую — оно просто отвечает на другой вопрос, чем тот, что важен в продакшене: «работает ли это», а не «работает ли это при данных в 50 раз больше».

ЭксплуатацияСредний уровень

Как получать оповещения раньше, чем проблема пайплайна станет дорогой?

Полноценные observability-платформы решают эту задачу, но это слишком много платформы для вопроса, который обычно сводится к четырём-пяти цифрам, движущимся не в ту сторону.

СтоимостьСредний уровень

Как снизить стоимость Flink-кластера, не сломав чекпоинты?

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