Я читаю исходный код MapRedcue, чтобы лучше понять внутренний механизм MapReduce.И у меня есть проблема, когда я пытаюсь понять, как данные, полученные на этапе карты, объединяются и отправляются, чтобы уменьшить функцию для дальнейшей обработки.Исходный код выглядит слишком сложным, и я просто хочу знать его концепции.
Что я хочу знать, так это то, как значения (как параметр Iterator) сортируются перед передачей в функцию redu ().В MapTask.runOldReducer () он создаст ReduceValuesIterator, передавая RawKeyValueIterator, где будет вызван Merger.merge () и будет выполнено множество действий (например, сбор сегментов).После прочтения кода мне кажется, что он пытается только отсортировать по ключу, и значения, сопровождаемые этим ключом, будут объединены / собраны без удаления.Например, map () может выдать
Key Value
http://www.abcfood.com/aLink object A
http://www.abcfood.com/bLink object B
http://www.abcfood.com/cLink object C
. Тогда в redu () ключ
будет http://www.abcfood.com/, а значения будут содержать объект A, объект B и объектC.
То есть сортируется по ключу http://www.abcfood.com/? Это правильно?Или что это сортировать, а затем передать, чтобы уменьшить функцию?
Большое спасибо.