Что происходит, когда картограф умирает в потоковом задании EMR?

Что произойдет в эластичном задании потоковой передачи mapreduce, если маппер внезапно умрет? Данные, которые уже были обработаны, будут воспроизведены? Если да, то есть ли возможность отключить это?

Я спрашиваю, потому что я использую EMR для вставки некоторых данных в стороннюю базу данных. Каждый картограф отправляет поступающие данные через HTTP. В этом случае, если маппер выйдет из строя, я не хочу повторять HTTP-запросы, и мне нужно продолжить с того места, где я остался.


person Vame    schedule 29.04.2014    source источник
comment
Что вы имеете в виду под потоковой передачей? В контексте Hadoop потоковая передача — это поддержка написания программ MR на любых языках без использования привязок Java Hadoop. Это то, что вы ищете, или обработка данных в режиме реального времени?   -  person Praveen Sripati    schedule 29.04.2014
comment
см. ответ Сударшана и мой комментарий ниже.   -  person Vame    schedule 29.04.2014


Ответы (1)


MR — отказоустойчивый фреймворк. При сбое задачи карты (потокового API или Java API) поведение остается таким же.

Как только средство отслеживания заданий получит уведомление о том, что задание не выполнено, оно попытается перепланировать задание. Временные выходные данные, созданные сбойной задачей, удаляются.

Более подробное обсуждение того, как обрабатываются сбои в MR, можно увидеть здесь

В вашем конкретном случае, я думаю, вам нужно обратиться к внешнему источнику в вашем методе setup(), чтобы узнать записи, которые были обработаны, а затем использовать эту информацию в ваших методах mapper(), чтобы решить, следует ли обрабатывать конкретную запись или нет.

person Sudarshan    schedule 29.04.2014
comment
Меня не волнует вывод. Я просто обрабатываю ввод и не хочу, чтобы он воспроизводился. Есть ли способ отключить эту функцию аварийного переключения? Мне нужно, чтобы мой новый маппер начал заново с того места, где он ушел. - person Vame; 29.04.2014
comment
Я не уверен, понимаю ли я, что вы имеете в виду, ваша обработка не удалась на полпути ... поэтому она отменит любую половину обработки, выполненную неудачной задачей, и начнет новую, она не может начаться с того места, где остановилась неудачная задача. - person Sudarshan; 29.04.2014
comment
Для чего именно я его использую: каждый картограф подключается через http к стороннему приложению, используя данные, которые он получает из потоковой передачи. Допустим, я передаю данные в несколько баз данных, используя mapreduce для распределенного выполнения. Это помогает мне, потому что распределяет задачу на столько машин, сколько мне нужно. Я не знаю, подходит ли MR для моего случая, но я не знаю никаких альтернатив. - person Vame; 29.04.2014
comment
Итак, вы говорите, что при обработке входного разделения, если половина записей обрабатывается, а затем задача завершается сбоем, когда задача перезапускается инфраструктурой MR, вы ожидаете, что она обработает только вторую половину файла (необработанная половина)? - person Sudarshan; 29.04.2014
comment
Я рассчитываю воспроизвести всю партию, но хочу продолжить только с необработанной ее частью. - person Vame; 30.04.2014
comment
Я думаю, вам нужно обратиться к внешнему источнику в вашем методе setup(), чтобы узнать, какие записи были обработаны, а затем использовать эту информацию в ваших методах mapper(), чтобы решить, следует ли обрабатывать конкретную запись или нет. По сути, этот вариант использования должен обрабатываться с помощью логики приложения. Ничто, встроенное в Hadoop, не может вам здесь помочь. - person Sudarshan; 30.04.2014
comment
хм, ок, я тоже об этом подумал. жаль что по другому нельзя. пожалуйста, добавьте свои комментарии в свой ответ, и я отмечу его как ответ. - person Vame; 30.04.2014
comment
Я отредактировал свой ответ, возможно, вы захотите отредактировать и свой вопрос с дополнительными деталями :) - person Sudarshan; 30.04.2014