Ротация лог-файлов приложений Apache Spark

Spark логи, Spark разработка примеры курсы обучение, Spark для дата-инженера и разработчика, обучение Apache Spark Школа Больших Данных Учебный Центр Коммерсант

Зачем включать ротацию лог-файлов потоковых приложений Apache Spark, какие конфигурации помогут ее настроить и для чего сжимать файлы журналов в длительных заданиях.

Чем полезна ротация лог-файлов Spark-приложений и как ее настроить

Об общих принципах логирования системных событий в приложениях Apache Spark мы уже рассказывали здесь. В этой статье подробнее разберем ротацию лог-файлов. Длительно работающее приложение Spark Streaming потоковой обработки событий может создавать огромный единый лог-файл. Работа с таким большим файлом требует много ресурсов для воспроизведения каждого обновления на сервере истории фреймворка. Вместо ведения одного большого файла журнала поможет ротация логов – процесс сохранения нескольких копий логов с удалением самой старой при создании самой новой копии. Процедура ротации заключается в переносе данных из рабочего лог-файла в архивный с автоматической заменой устаревших архивных файлов журнала.

Чтобы включить ротацию логов для Spark-приложений, нужно поработать с конфигурациями spark.eventLog.rolling.enabled и spark.eventLog.rolling.maxFileSize. Вместо того, чтобы генерировать один большой лог-файл, эта функция на основе настроенного временного интервала генерирует новые журналы событий и удаляет самые старые файлы. Такая ротация особенно полезна при выполнении длительных или потоковых заданий. Если задание выполняется в течение нескольких часов или дней, файл журнала событий может занять все доступное дисковое пространство.

При использовании провайдера файловой системы базовый каталог логирования должен быть указан в параметре конфигурации spark.history.fs.logDirectory. Он должен содержать подкаталоги, каждый из которых представляет журналы событий приложения. Сами задания должны быть настроены на регистрацию событий в том же общем, доступном для записи каталоге. Например, если сервер был настроен с каталогом журнала hdfs://namenode/shared/spark-logs, то параметры на стороне клиента будут следующими:

eventLog.enabled true
eventLog.dir hdfs://namenode/shared/spark-logs

Чтобы включить ротации лог-файлов, надо настроить следующие конфигурации:

  • spark.eventLog.rotation.enabled установить в значение true. По умолчанию этот параметр отключен в файле конфигурации.
  • eventLog.rotation.interval задает временной интервал для ротации журнала. Минимальное значение этой конфигурации равно 60 секунд. Значение по умолчанию 5 минут (300 секунд).
  • eventLog.rotation.minFileSize указывает минимальный размер файла для ротации лог-файла. Минимальное значение (по умолчанию) составляет 1 МБ.
  • eventLog.rotation.maxFilesToRetain указывает, сколько ротируемых лог-файлов сохранять во время очистки. Допустимый диапазон — от 1 до 10, значение по умолчанию — 2.

Все эти параметры можно указать в sparkSubmitParameters в разделе API StartJobRun. Например, следующие параметры командной строки, которые передаются при запуске приложения с помощью команды spark-submit, включают ротацию лог-файлов системных событий каждые 5 минут минимальным размером 1 МБ. Spark будет хранить не более 2 файлов журналов, удаляя самые старые по мере создания новых:

"sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.eventLog.rotation.enabled=true --conf spark.eventLog.rotation.interval=300 --conf spark.eventLog.rotation.minFileSize=1m --conf spark.eventLog.rotation.maxFilesToRetain=2"

В заключение отметим, что ротация лог-файлов, т.е. генерация нескольких журналов системных событий вместо одного огромного лога, не уменьшает общий размер журналов. Поэтому полезно включить сжатие лог-файлов, настроив конфигурацию сервера истории spark.history.fs.eventLog.rolling.maxFilesToRetain. При этом стоит помнить, что сжатие — это операция с потерями данных. Оно отбросит некоторые события, которые больше не будут видны в пользовательском интерфейсе. Например, если приложение имеет 5 лог-файлов и конфигурации spark.history.fs.eventLog.rolling.maxFilesToRetain установлено значение 2, то для сжатия будут выбраны первые 3 файла журнала. Именно они будут перезаписаны в один компактный файл с отбрасыванием устаревших событий, которые решено исключить:

  • события для выполненного задания и связанные с нем события этапов/задач;
  • события для исполнителя, который прекратил работу;
  • события для завершенного выполнения SQL-запроса и связанные с ним события заданий/этапов/задач;

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

Узнайте больше про использование Apache Spark для разработки приложений аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://spark.apache.org/docs/latest/monitoring.html#applying-compaction-on-rolling-event-log-files
  2. https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-log-rotation.html
Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.
Поиск по сайту