Хобрук: Ваш путь к мастерству в программировании

Spark Streaming Standalone: ​​сохранение журналов

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

Из того, что я прочитал в документации, у меня установлен флаг spark.eventLog.enabled в значение true. Но это только сохраняет журналы событий в папку tmp/spark-events. Эти журналы не очень полезны для меня, как я понимаю. Мои задания часто терпят неудачу из-за многих исключений. Как правильно хранить эти журналы, которые отображаются в терминале (я предполагаю, журналы драйвера?) и анализировать мои исключения?


Ответы:


1

Если вы хотите записывать в журнал только события, происходящие на стороне драйвера, самый простой способ — предоставить spark файл конфигурации ведения журнала. По умолчанию spark использует log4j для ведения журнала, поэтому при запуске задания spark-submit вы можете использовать флаг spark.driver.extraJavaOptions для передачи конфигурации log4j и добавить к нему RollingFileAppender:

spark.driver.extraJavaOptions=-Dlog4j.configuration=/path/to/your/log4j.xml

Это базовый шаблон для скользящего приложения log4j-1.2 xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="log.txt" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="100KB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>
    <logger name="log4j.rootLogger" additivity="false">
    <level value="DEBUG"/>
    <appender-ref ref="RollingFileAppender"/>
</logger>
</log4j:configuration>

Дополнительную информацию можно найти в разделе Конфигурация Spark на сайте spark. документация.

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

02.03.2016
  • Спасибо за ответ! У меня не было возможности проверить это. Вернется как можно скорее 03.03.2016
  • Эй, я только что попробовал это и получил много операторов log4j: WARN с в конце: '....log4j:ERROR No appender named [FILE] could be found. Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties' 04.03.2016
  • @Aswin исправил это. Это должен быть RollingFileAppender. 04.03.2016
  • Спасибо, но я все еще получаю журналы ERROR. Любая идея, почему это может происходить? Я добавил журналы в раздел «Правка» в вопросе. 04.03.2016
  • @Aswin По какой-то причине он не находит класс RoleFileAppender. Возможно, вы хотите явно передать jar log4j драйверу spark через spark.driver.extraClassPath 04.03.2016
  • Я попытался добавить log4j-api-2.5.jar и log4j-core-2.5.jar. Не повезло, получаю ту же ошибку 04.03.2016
  • Вы используете log4j2, который имеет другой формат XML. Тот, который я вам дал, предназначен для log4j 1.2, я также написал это в ответе :) 04.03.2016
  • Хорошо, я отредактировал файл log4j.properties.template и добавил файл log4j.properties с приложением File. Кажется, работает. Спасибо, в любом случае! 07.03.2016

  • 2

    Я добавил эти строки в SPARK_HOME/conf/log4j.properties.

    log4j.rootLogger=ERROR, file
    log4j.appender.file=org.apache.log4j.FileAppender
    log4j.appender.file.File=/tmp/application.log
    log4j.appender.file.append=false
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    

    Можно использовать любой аппендер log4j. Я использую файл appender здесь.

    P.S. Тем не менее, журналы stdout отсутствуют. Сохраняются только журналы stderr. Еще бы понять почему.

    07.03.2016
    Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..