Я запускаю приложение через 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). Мои вопросы:
Почему ${spark.yarn.app.container.log.dir}
разрешается в пустую строку?
Есть ли способ автоматически архивировать журналы драйверов на S3 (как это делается для журналов исполнителей)?