2014-09-30 3 views
4

Я пытаюсь использовать mrjob для запуска hadoop в EMR и не могу понять, как настроить ведение журнала (созданные пользователем журналы на шагах карты/уменьшения), поэтому я смогу получить к ним доступ после завершения кластера.mrjob: setup logging on EMR

Я попытался настроить каротаж с помощью модуля logging, print и sys.stderr.write(), но пока не повезло. Единственный вариант, который работает для меня, - это записать журналы в файл, затем SSH-машину и прочитать ее, но ее громоздкость. Я хотел бы, чтобы мои журналы отправлялись в stderr/stdout/syslog и автоматически собирались на S3, поэтому я могу просматривать их после завершения кластера.

Вот пример word_freq с лесозаготовками:

"""The classic MapReduce job: count the frequency of words. 
""" 
from mrjob.job import MRJob 
import re 
import logging 
import logging.handlers 
import sys 

WORD_RE = re.compile(r"[\w']+") 


class MRWordFreqCount(MRJob): 

    def mapper_init(self): 
     self.logger = logging.getLogger() 
     self.logger.setLevel(logging.INFO) 
     self.logger.addHandler(logging.FileHandler("/tmp/mr.log")) 
     self.logger.addHandler(logging.StreamHandler()) 
     self.logger.addHandler(logging.StreamHandler(sys.stdout)) 
     self.logger.addHandler(logging.handlers.SysLogHandler()) 

    def mapper(self, _, line): 
     self.logger.info("Test logging: %s", line) 
     sys.stderr.write("Test stderr: %s\n" % line) 
     print "Test print: %s" % line 
     for word in WORD_RE.findall(line): 
      yield (word.lower(), 1) 

    def combiner(self, word, counts): 
     yield (word, sum(counts)) 

    def reducer(self, word, counts): 
     yield (word, sum(counts)) 


if __name__ == '__main__': 
    MRWordFreqCount.run() 

ответ

3

Из всех вариантов, только один действительно работает используют STDERR с прямой записью (sys.stderr.write) или с помощью регистратора с StreamHandler в STDERR.

Журналы позже могут быть восстановлены после того, как работа закончена (успешно или с ошибкой) от:

[s3_log_uri]/[jobflow-ид]/ТАСК-попытка/[задание-ид]/[попытки -id]/stderr

Обязательно сохраняйте журналы в своей конфигурации runners.emr.cleanup.

Смежные вопросы