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

Добрый день,

Я выполняю потоковое задание Flink (v1.7.1) в AWS EMR 5.20, и мне хотелось бы, чтобы все журналы задач и менеджеров заданий на моем задании в S3.Logback используется в соответствии с рекомендациями команды Flink.Поскольку это длительное задание, я хочу, чтобы журналы были:

  1. Периодически копироваться на S3
  2. Свертывание по времени, по размеру или по обоим причинам (так как может быть огромныйколичество журналов)
  3. Очиститься от внутреннего диска узлов EMR (в противном случае диски будут заполнены)

То, что я пробовал:

  1. Включено ведение журнала на S3 при создании кластера EMR
  2. Сконфигурированные журналы прокатки пряжи с: yarn.log-aggregation-enable, yarn.nodemanager.remote-app-log-dir, yarn.log-aggregation.retain-seconds, yarn.nodemanager.log-aggregation.roll-мониторинг-interval-секунд
  3. Настроенные скользящие журналы в logback.xml:
    <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.file}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>%d{yyyy-MM-dd HH}.%i.log</fileNamePattern>
            <maxFileSize>30MB</maxFileSize>    
            <maxHistory>3</maxHistory>
            <totalSizeCap>50MB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{60} %X{sourceThread} - %msg%n</pattern>
        </encoder>
    </appender>

То, что я получил / наблюдал до сих пор:

  • (1) действительно помогало с периодическим копированием файла журнала на S3
  • (2) мне показалось бесполезнымдо сих пор.Журналы агрегируются только тогда, когда задание потоковой передачи завершено, и теперь наблюдается циклическое изменение.
  • (3) дало некоторый результат, но пока не близко к требованиям:
    • скользящие журналы находятся в некотором кешепапка ( / mnt / yarn / usercache / hadoop / appcache / application_1549236419773_0002 / container_1549236419773_0002_01_000002 )
    • в обычной папке журналов YARN доступен только последний файл скользящих журналов ( / mnt)var / log / hadoop-yarn / Containers / application_1549236419773_0002 / container_1549236419773_0002_01_000002 )
    • только последний файл скользящих журналов доступен в S3

КорочеИз 3 требований, которые я получил, я мог только (1) или (2 & 3).

Не могли бы вы помочь мне с этим?

Спасибо и наилучшими пожеланиями,

Averell

1 Ответ

0 голосов
/ 04 февраля 2019

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

Я сам не пробовал, но если бы мне пришлось, я бы попробовал следующее:

  1. Установите S3 на экземплярах EC2 с помощью S3fs.
  2. Настройка logrotate (или эквивалент) для автоматического копирования и очистки файлов журнала.

Вы можете использовать действие начальной загрузки для автоматической настройки всего вышеперечисленного.

Если S3fs доставляет вам проблемы, вы можете сделать немного больше сценариев и напрямую использовать команду aws s3 для синхронизации журналов, а затем удалить их после их копирования.

...