Здесь случай использования:ограничивают количество записей, произведенных все редукторы коллективно
входных адреса считываются картами, а затем излучаются опубликовать некоторую фильтрацию. Затем разделители разбивают их на их имя хоста.
У меня есть глобальный предел по выходным URL-адресам после запуска работы по сокращению карты. Я распределяю это равномерно по всем редукторам. т.е. если глобальный предел равен 1000, а количество редукторов равно 5, то каждый редуктор не будет испускать (1000/5 = 200) URL-адресов в качестве выходных данных
Проблема в том, что если есть URL-адреса только из 2-х хостов (из-за пользовательского ввода), и есть 100000 URL-адресов каждого из этих двух хостов, , 2 редуктора, обрабатывающие эти URL-адреса (тот же узел, тот же раздел) будут ограничивать только 200 URL-адресов для вывода. Редукторы для отдыха не получают никаких данных для обработки из-за разбиения на разделы и извлечения 0 записей.
Так что, хотя у меня было 100000 URL/хост и глобальный предел 1000, вывод имеет только 400 URL-адресов (200 URL-адресов/хост).
Мне нужно разделить по имени хоста, поскольку URL-адреса одного и того же хоста группируются вместе и упрощают дальнейшую логику. Является ли функция очистки некоторой частью потока с уменьшением карты хауопа или вашего предлагаемого механизма? Расскажите подробнее об этом. –
вы можете перезаписать эту функцию в своем классе редуктора. В вашей функции сокращения вы должны просто хранить записи в контейнере, а не записывать их. В функции очистки вы можете выполнить связь и решить, сколько записей должен записывать текущий редуктор. Найдите функцию очистки по следующей странице: http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/mapreduce/Mapper.html – root1982