Логирование в 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). Для просмотра событий в текстовом виде выполните следующие действия:
-
Выведите содержимое базовой директории с логами (
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
-
Выведите содержимое определенного лог-файла с помощью следующей команды.
$ 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 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.cleaner.enabled |
Активирует очистку логов событий в хранилище для компонента History Server |
spark.history.store.path |
Путь в локальной файловой системе для кеширования history-данных приложений Spark |
spark.history.ui.port |
Порт, на котором доступен веб-интерфейс Spark History Server |
spark.history.fs.logDirectory |
Директория, из которой History Server подбирает лог-файлы событий |