Обеспечение журналов в Hadoop EMR

У меня давно запущено потоковое задание Hadoop на Amazon EMR (15 узлов, >1,5 часа). Задание завершается с ошибкой примерно на 75% уровне завершения. Я использую Python как для картографа, так и для редуктора.

Я сделал следующую оптимизацию:

sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
sys.stderr = os.fdopen(sys.stderr.fileno(), 'w', 0)

logging.getLogger().setLevel(logging.INFO)

Также я добавил следующее сразу после выдачи записей журнала с модулем logging:

    sys.stderr.flush()
    time.sleep(30)
    sys.exit(3)

пытаться поймать ошибки безрезультатно: файлы журнала Hadoop не показывают мои ошибки :(

Как я могу заставить Hadoop регистрировать мои сообщения и не удалять их???


person jldupont    schedule 12.06.2012    source источник


Ответы (1)


Я не на 100% уверен в решении Python, но я знаю, что при использовании интерфейса командной строки EMR вы должны указать URI ведения журнала в Amazon S3.

Например

./elastic-mapreduce --create --other-options --log-uri s3n://emr.test/logs

Это указывается при запуске кластера. Затем в каталоге журналов на S3 создаются следующие каталоги

/jobflowid
   /daemons
   /jobs
   /nodes
   /steps
   /task-attempts

В /steps вы получаете папку для каждого отдельного задания, а ниже этого здесь записываются выходные данные задания stderr, stdout и контроллера.

person Girish Rao    schedule 14.06.2012
comment
да, вы можете указать папку журнала на S3, но проблема в том, что я не получаю все сообщения журнала. - person jldupont; 15.06.2012