Стандартные практики для входа в задания MapReduce

Я пытаюсь найти лучший подход для входа в задания MapReduce. Я использую slf4j с log4j appender, как и в других моих Java-приложениях, но так как задание MapReduce выполняется распределенным образом по кластеру, я не знаю, где я должен установить местоположение файла журнала, так как это общий кластер с ограниченным доступом привилегии.

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

2 ответа

Решение

Вы могли бы использовать log4j, который является структурой регистрации по умолчанию, которую использует hadoop. Итак, из вашего приложения MapReduce вы можете сделать что-то вроде этого:

import org.apache.log4j.Logger;
// other imports omitted

public class SampleMapper extends Mapper<LongWritable, Text, Text, Text> {
    private Logger logger = Logger.getLogger(SampleMapper.class);

    @Override
    protected void setup(Context context) {
        logger.info("Initializing NoSQL Connection.")
        try {
            // logic for connecting to NoSQL - ommitted
        } catch (Exception ex) {
            logger.error(ex.getMessage());
        }
    }

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        // mapper code ommitted
    }
}        

Этот пример кода будет использовать log4j logger для записи событий в унаследованный регистратор Mapper. Все события журнала будут записываться в соответствующие журналы задач. Вы можете посетить журналы задач с веб-страницы JobTracker(MRv1)/ResourceManager(MRv2).

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

yarn logs -applicationId <application_id>

Хотя, если вы используете mapreduce v1, нет единой точки доступа из командной строки; следовательно, вы должны войти в каждый TaskTracker и посмотреть в настроенном пути в целом /var/log/hadoop/userlogs/attempt_<job_id>/syslog указано в ${hadoop.log.dir}/userlogs содержит вывод log4j.

Чтобы добавить ответ @Ashrith: вы можете просматривать отдельные журналы отслеживания задач через графический интерфейс JobTracker. Попытки выполнения задачи видны в графическом интерфейсе JT, и вы можете щелкнуть любой из следующих элементов: stderr, stdout и системные журналы. Системные журналы - это то место, где вы найдете свои выходы log4j.

Другие вопросы по тегам