Логирование в Spark

ПРИМЕЧАНИЕ
Данный раздел описывает работу с ADH-сервисом Spark3, однако все настройки, пути и примеры аналогичны для сервиса Spark.

По умолчанию логирование в Spark включено, и все логи хранятся в HDFS-директории /var/log/spark/apps. Внутри этой директории Spark создает поддиректории с логами отдельных Spark-приложений.

Такие компоненты Spark, как History Server, Livy и Thrift Server, также генерируют логи и сохраняют их в локальной файловой системе в следующих директориях:

  • /var/log/spark3 — хранит логи History Server и Thrift Server.

  • /var/log/livy-spark3 — хранит логи Livy.

Просмотр логов

Существует два способа просмотра логов Spark:

  • В виде обычных текстовых файлов.

  • Используя веб-интерфейс History Server. В этом случае логи Spark должны храниться в HDFS, чтобы History Server мог получить доступ ко всем логам, которые генерируются на различных узлах кластера.

Текстовые логи

Spark сохраняет логи в виде JSON-файлов, которые состоят из отдельных записей, называемых событиями (events). Для просмотра событий в текстовом виде выполните следующие действия:

  1. Выведите содержимое базовой директории с логами (spark.eventLog.dir).

    $ sudo -u hdfs hdfs dfs -ls /var/log/spark/apps

    В выводе отображаются лог-файлы различных Spark-приложений.

    Found 3 items
    -rwxrwx---   3 admin hadoop      57123 2023-08-24 13:32 /var/log/spark/apps/application_1690315534352_0005
    -rw-rw----   3 admin hadoop     126205 2023-08-24 14:52 /var/log/spark/apps/application_1690315534352_0006
    -rw-rw----   3 admin hadoop     235626 2023-08-25 09:14 /var/log/spark/apps/application_1690315534352_0007
  2. Выведите содержимое определенного лог-файла с помощью следующей команды.

    $ sudo -u hdfs hdfs dfs -tail /var/log/spark/apps/application_1690315534352_0007

    Содержимое лог-файла имеет следующий вид:

    ... ID":"2","Executor Info":{"Host":"ka-adh-2.ru-central1.internal","Total Cores":1,"Log Urls":{"stdout":"http://ka-adh-2.ru-central1.internal:8042/node/containerlogs/container_e01_1690315534352_0006_01_000003/admin/stdout?start=-4096","stderr":"http://ka-adh-2.ru-central1.internal:8042/node/containerlogs/container_e01_1690315534352_0006_01_000003/admin/stderr?start=-4096"},"Attributes":{"NM_HTTP_ADDRESS":"ka-adh-2.ru-central1.internal:8042","USER":"admin","LOG_FILES":"stderr,stdout","NM_HTTP_PORT":"8042","CLUSTER_ID":"","NM_PORT":"8041","HTTP_SCHEME":"http://","NM_HOST":"ka-adh-2.ru-central1.internal","CONTAINER_ID":"container_e01_1690315534352_0006_01_000003"},"Resources":{},"Resource Profile Id":0}}
    {"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"2","Host":"ka-adh-2.ru-central1.internal","Port":46065},"Maximum Memory":384093388,"Timestamp":1692888721218,"Maximum Onheap Memory":384093388,"Maximum Offheap Memory":0}
    {"Event":"SparkListenerApplicationEnd","Timestamp":1692888752753}

Веб-интерфейс History Server

Компонент Spark History Server предоставляет веб-интерфейс для визуализации событий завершенных Spark-приложений. Веб-интерфейс доступен по адресу http://<history-host>:<history-port>, где:

  • <history-host> — адрес хоста, на котором установлен компонент Spark History Server.

  • <history-port> — порт по умолчанию 18092 (Spark3) или 18082 (Spark). Номер порта можно изменить с помощью параметра spark.history.ui.port в ADCM.

Веб-интерфейс History Server выглядит следующим образом.

spark history ui
Веб-интерфейс Spark History Server
spark history ui
Веб-интерфейс Spark History Server

Spark History Server ищет лог-файлы событий в директории, которая задается параметром spark.history.fs.logDirectory в ADCM (по умолчанию это директория hdfs:///var/log/spark/apps). Обычно параметры spark.history.fs.logDirectory и spark.eventLog.dir должны указывать на одну и ту же директорию, чтобы History Server имел доступ ко всем лог-файлам, которые генерирует Spark.

Настройка логирования

Под капотом Spark использует библиотеку Log4j для ведения логов. Технически вы можете управлять процессом логирования, внося изменения в файл log4j.properties (файл можно создать из шаблона /etc/spark/conf.dist/log4j.properties.template и сохранить в этой же директории). Описание работы с log4j.properties выходит за рамки данной статьи, однако ниже приведены ADCM-параметры сервиса Spark3, с помощью которых можно настроить логирование для Spark.

Параметр Описание

spark.eventLog.enabled

Включает/отключает логирование Spark

spark.eventLog.dir

Базовая директория для хранения лог-файлов Spark. Чтобы History Server имел доступ ко всем лог-файлам, которые генерирует Spark, данный параметр должен указывать на ту же директорию, что и spark.history.fs.logDirectory

spark.history.fs.cleaner.enabled

Активирует очистку логов событий в хранилище для компонента History Server

spark.history.store.path

Путь в локальной файловой системе для кеширования history-данных приложений Spark

spark.history.ui.port

Порт, на котором доступен веб-интерфейс Spark History Server

spark.history.fs.logDirectory

Директория, из которой History Server подбирает лог-файлы событий

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней