MapReduce требует, чтобы все картографы закончили работу перед этапом объединения - PullRequest
1 голос
/ 26 марта 2012

Мне недавно пришлось выполнить задание, которое требовало завершения всех картографов перед передачей результатов на стадию объединения (из-за способа, которым были обработаны файлы). Эта функция доступна для редуктора путем настройки следующих параметров -

// force 100% of the mappers to conclude before reducers start
job.set("mapred.reduce.slowstart.completed.maps", "1.0");

Я не смог найти подобную конфигурацию для стадии объединения. В конце концов я разделил свою работу на две части, при этом этап объединения работал как редуктор, а мое первоначальное сокращение было передано в задание № 2 (mapper2 просто передает данные без их изменения).

Мне было интересно - есть ли способ, который я пропустил, чтобы настроить 100% завершение карты перед объединением? спасибо.

1 Ответ

1 голос
/ 26 марта 2012

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

Существует ещеподробное определение в книге Тома Уайта: «Hadoop - исчерпывающее руководство»:

http://books.google.com/books?id=Nff49D7vnJcC&pg=PA178&lpg=PA178&dq=hadoop+combiner+spill&source=bl&ots=IiesWqctTu&sig=V5b3Z2EVWp5JzIvc_Fzv1-AJerI&hl=en&sa=X&ei=QUJwT9XBCOna0QGOzpnlBg&ved=0CFMQ6AEwAw#v=onepage&q=hadoop%20combiner%20spill&f=false

Таким образом, ваш комбайнер может работать до того, как ваша карта даже закончит работу

...