Я собираюсь написать программу Hadoop 2.x MapReduce. Обычно журналы или любой вывод из Mapper или Reducer задания MapReduce регистрируются в журнале приложений YARN. Но меня больше всего интересует происходящее внутри Mapper. Итак, Я хотел бы использовать log4j2 внутри Mapper для входа в отдельный локальный файл на каждом узле данных.Как добавить регистратор в LogContext
Мой план состоит в том, чтобы инициализировать org.apache.logging.log4j.core.LoggerContext
в начале Mapper, чтобы я мог перенастроить отдельный файл журнала, а затем инициализировать org.apache.logging.log4j.Logger
. Проблема в том, что обе инициализированы успешно, но они не связаны друг с другом. Более того, только узел, вызывающий задание hadoop, инициализировал пустой файл журнала.
Мой вопрос:
- Почему только узел вызова задания Hadoop инициализируется пустой файл журнала, другие узлы не хотя я уверен, что другие узлы также имеют картографами.
- Как добавить регистратор в инициализированном журнале контексте
Как я могу узнать, имеет ли Mapper свой собственный ClassLoader или нет? Тем не менее, я также хотел бы упомянуть, что класс Map Reduce является статическим классом, который я встроил в другой класс, а функция map находится внутри этого класса уменьшения статической карты. Пример: https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Example:_WordCount_v2.0 – Rui