Глобальные значения в карте hadoop уменьшаются
Мой вариант использования включает в себя обнаружение дефектных элементов... скажем, у меня есть список продуктов с миллионами элементов в формате hdf, помеченный как хороший / дефектный... Я хочу выяснить первые 10 совпадений дефектных элементов и затем остановиться.
Я думал об использовании счетчиков, чтобы сделать это, но похоже, что все счетчики находятся на уровне отслеживания задач... поэтому каждый отслеживатель задач поддерживает свою собственную копию счетчика, которая на самом деле не агрегируется до завершения задания. Таким образом, счетчик, работающий в задании карты одного из разделений, не будет иметь никакого представления, если другая карта уже нашла 10 элементов.
Есть идеи, как решить эту проблему?
2 ответа
Найдите топ-10 локальных записей в задачах карты и отправьте их в редуктор. Итак, если есть 7 картографов, то редуктор получит 70 записей. Редуктор должен отсортировать эти 70 записей и выдать 10 лучших мировых записей. Вот код для того же.
Обратите внимание, что этот подход будет работать только с одним редуктором, а не с редукторами 1+, и это может быть узким местом. Кроме того, нет связи между картографами, поэтому нет способа уменьшить нагрузку на редуктор. Проверьте это документы, где картографы могут общаться друг с другом, используя глобальные данные. IBM BigInsights реализует это.
Проверьте эту запись в блоге для многих образцов.
Предполагая, что вы используете Hadoop, счетчики также доступны во всем мире.
Однако я не понимаю причину использования Map Reduce для этой проблемы.