Используйте собственный приложение Log4J при работе с искрой в AWS EMR - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь выполнить spark submit в AWS EMR, чтобы выполнить простой проект, в котором используется созданный мной собственный обработчик log4j.
Я могу передать свои свойства log4j, предоставив следующую конфигурацию в настройках программного обеспечения кластера:

[{
    "classification": "spark-log4j",
    "properties": {
        "log4j.appender.S": "CustomLog4JAppender",
        "log4j.rootLogger": "DEBUG,S"
    }
}

]

Но когда я запускаю шаг кластера, я получаю:
log4j: ОШИБКА Не удалось создать экземпляр класса [CustomLog4JAppender].java.lang.ClassNotFoundException: CustomLog4JAppender
в кластере stderr.

Выполняемый мной jar-файл находится в S3 и содержит класс Main, мой класс appender и все зависимости.

Я выполняю кластер с помощью: command-runner.jar
и выполняю следующую команду:
spark-submit --deploy-mode client --class Main s3: //ndompath_to_jar‹.jar

Итак, несколько вопросов здесь:

  1. Какой компонент в кластере загружает регистратор log4j и его свойства?это происходит в главном узле?в основном узле?
  2. Что я могу сделать, чтобы решить эту проблему?Как я должен выполнить это по-другому?как заставить его распознавать мой пользовательский класс appender?

Спасибо!

1 Ответ

0 голосов
/ 19 ноября 2018

Я также разработал пользовательский класс log4j appender и без проблем использовал его в моем файле log4j.properties:

log4j.rootLogger=ERROR, defaultLog
log4j.appender.defaultLog=com.my.package.CustomLog4jFileAppender

, поэтому я предполагаю, что этой строки кода "log4j.appender.S": "CustomLog4JAppender" недостаточно для определения местоположения вашего пользовательского аппендера, и вам, вероятно, нужно указать местоположение вашего пользовательского класса аппендеров. Попробуйте это:

"log4j.appender.S": "com.yourPackage.CustomLog4JAppender",
...