Как можно автоматически архивировать журналы драйверов на S3 при использовании кластера EMR? - PullRequest
0 голосов
/ 10 января 2019

Я запускаю приложение через spark-submit в кластере EMR, состоящем из главного узла и 4 рабочих узлов (в client режиме развертывания). Кластер настроен с включенным агрегированием журналов, и все журналы моего исполнителя должным образом архивируются в корзину S3. Однако я не вижу журналы, которые генерируются драйвером при первом запуске моего приложения (они отображаются на консоли, но, похоже, не регистрируются в файле). попытался обновить файл ``, добавив:

log4j.rootLogger = WARN,console,file
....
log4j.appender.file.DatePattern=.yyyy-MM-dd
log4j.appender.file.Threshold = TRACE
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File = ${spark.yarn.app.container.log.dir}/spark.log
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n

как рекомендовано здесь , но когда я использую spark-submit, ведение журнала завершается неудачей, поскольку ${spark.yarn.app.container.log.dir}/spark.log разрешается до /spark.log, и я получаю ошибку Permission Denied.

В настоящее время я работаю над этим, следуя этому ответу , так что вышеупомянутое используется для конфигурации драйвера (но для входа в конкретный существующий путь), а конфигурация ведения журнала исполнителя является настройкой по умолчанию (для использования агрегация и архивирование журнала до S3). Мои вопросы:

  1. Почему ${spark.yarn.app.container.log.dir} разрешается в пустую строку?

  2. Есть ли способ автоматически архивировать журналы драйверов на S3 (как это делается для журналов исполнителей)?

...