Spark Streaming и централизованное ведение журнала: добавьте executorId в журналы
Я пытаюсь настроить централизованное ведение журнала для потокового приложения Spark. Мой конкретный пример использования - экспорт журналов драйверов и исполнителей в журналы AWS CloudWatch, но я думаю, что часть моего вопроса не зависит от журналов CloudWatch и EMR.
Благодаря запуску Spark на Yarn / отладке вашего приложения я знаю, как передать свой собственный файл конфигурации log4j, и даже это spark.yarn.app.container.log.dir
доступен. Я уже в состоянии заставить каждого исполнителя входить в локальный файл и запускать агент журналов CloudWatch в каждом экземпляре для публикации локального файла в журналах CloudWatch.
Проблема с этой настройкой заключается в том, что журналы от всех исполнителей смешаны. Невозможно узнать, какой исполнитель произвел какое событие. Я хотел добавить что-то вроде идентификатора исполнителя в имя потока CloudWatch или напрямую в журналы. Однако я не вижу, как внедрить эту информацию из Spark в log4j.
Я бросил быстрый взгляд на ExecutorRunnable.scala
но не удалось определить подходящую переменную среды или системное свойство. Вам известно о какой-либо собственности, которая может соответствовать моим потребностям? Как люди справляются с этой проблемой? (даже в стек ELK или что-то еще)