Я делаю подсчет слов с сортировкой (по значению) в одной задаче MapReduce. Два пути для достижения этой цели:один редуктор против нескольких редукторов с последующей обработкой для подсчета слов и сортировки. Какой из них более эффективен и масштабируемо?
Используя один редуктор и сохранение все в HashMap в функции уменьшения и сортировки все по значению функции Cleanup, а затем писать все в файл.
Использование нескольких редукторов и сохранение количества слов в HDFS после задания MapReduce. После того, как MR будет сортировать все, используя Java.
Какое решение лучше в смысле эффективности и масштабируемости.
Во втором варианте сортировка может выполняться через Java Collection.sort() путем доступа к каждому файлу (part-r-00000, part-r-00001, ...) и получения значений и их хранения в HashMap. Каждая запись hashmap может быть добавлена в список и может быть отсортирована с помощью Collection.sort(). Считаете ли вы, что это возможно, если мы имеем дело с большими файлами? –
@HamzaMalik Какой смысл читать все файлы с помощью java-программы после MR-работы, если вы можете сделать то же самое в редукторе? – AdamSkywalker
Потому что в одной задаче MR я могу найти частоту слов (мой редуктор суммирует все конечные частоты) и записывается обратно в HDFS. Я также хочу сортировать значение ключа, выводимое по значению, но с помощью ключа (слов). –