Мониторинг памяти выполнения Spark

Я хочу иметь возможность отслеживать память выполнения Spark, а не память, доступную в SparkUI. Я имею в виду, память выполнения НЕ память исполнителя.

Под памятью выполнения я имею в виду:

Этот регион используется для буферизации промежуточных данных при выполнении перемешиваний, объединений, сортировок и агрегации. Размер этого региона настраивается через spark.shuffle.memoryFraction (по умолчанию 0.2). Согласно: Унифицированное управление памятью в Spark 1.6

После интенсивного поиска ответов я не нашел ничего, кроме оставшихся без ответа вопросов Stackru, ответов, которые касаются только памяти, или ответов с неопределенными типами, использующими Ganglia, консолью Cloudera и т. Д.

Кажется, существует потребность в этой информации о переполнении стека, но пока нет ни одного удовлетворительного ответа. Вот некоторые главные сообщения Stackru при поиске мониторинга искровой памяти

Мониторинг выполнения Spark и использования памяти

Мониторинг использования памяти Spark Jobs

СПАРК: Как контролировать потребление памяти на кластере Спарк?

Spark - отслеживать фактическую память исполнителя

Как я могу контролировать использование памяти и процессора при использовании приложения spark?

Как получить память и использование процессора приложением Spark?

Вопросы

Версия Spark> 2.0

  1. Можно ли отслеживать память выполнения задания Spark? Под мониторингом я имею в виду, как минимум, видеть использованную / доступную, как и память для каждого исполнителя, на вкладке "Исполнитель" в SparkUI. Да или нет?

  2. Могу ли я сделать это с SparkListeners (@JacekLaskowski?) Как насчет истории сервера? Или единственный способ - через внешние инструменты? Графана, Ганглия, другие? Если внешние инструменты, не могли бы вы указать на учебник или предоставить более подробные рекомендации?

  3. Я видел, что использование SPARK-9103 отслеживающей искры похоже на то, что пока невозможно контролировать память выполнения. Также это актуально для SPARK-23206 Метрики настройки дополнительной памяти.

  4. Есть ли Peak Execution memory достоверная оценка использования / заполнения оперативной памяти в задаче? Если, например, пользовательский интерфейс рабочей области говорит, что задача использует максимум 1 ГБ, а у меня по 5 процессоров на исполнителя, значит ли это, что для выполнения этапа мне нужно по крайней мере 5 ГБ памяти на каждого исполнителя?

  5. Есть ли другие прокси, которые мы могли бы использовать, чтобы получить представление о памяти выполнения?

  6. Есть ли способ узнать, когда память выполнения начинает кушать в памяти? Когда моя кэшированная таблица исчезает со вкладки "Хранилище" в SparkUI или остается только ее часть, означает ли это, что она была удалена из памяти выполнения?

1 ответ

Решение

Отвечая на мой вопрос для дальнейшего использования:

Мы используем Mesos в качестве менеджера кластера. В пользовательском интерфейсе Mesos я нашел страницу со списком всех исполнителей данного работника, и там можно найти использование памяти исполнителем. Похоже, что общее использование памяти хранения + выполнение. Я ясно вижу, что, когда память заполняется, исполнитель умирает.

Для доступа:

  • Перейдите на вкладку Агенты, где перечислены все работники кластера.
  • Выберите работника
  • Выберите Framework - тот, который с названием вашего скрипта
  • Внутри у вас будет список исполнителей для вашей работы на этом конкретном работнике.
  • Об использовании памяти см.: Mem (Used / Allocated)

Подобное можно сделать для водителя. Для каркаса вы выбираете тот с именем Spark Cluster

Если вы хотите узнать, как извлечь это число программно, посмотрите мой ответ на этот вопрос: Как получить память для Mesos Agents Framework Executor

Я включаю внутренние метрики Spark для исполнителя и могу получить информацию о JVMHeapMemory, jvm.heap.usage, OnHeapExecutionMemory, OnHeapStroageMemory и OnHeapUnifiedMemory для своих исследований. См. Документ (https://spark.apache.org/docs/3.0.0-preview/monitoring.html) для получения дополнительной информации.

Другие вопросы по тегам