Я выполняю локальный односистемный тест с использованием Qizmt простой операции MapReduce. В конце фазы «Карта» я звоню:
output.Add(rKey, rValue);
Это называется, скажем, миллион раз, а ключи - 1,2,3,4,5,6 и т. Д. - каждый уникальный (в конце концов, я просто тестирую). Я проверил, что это происходит так, как задумано. Это. Функция вызывается миллион независимых раз, и введенные значения верны.
К моему удивлению, только в фазе «Уменьшить», скажем, фактически получено около сотни ключей (то есть функция «Уменьшить» вызывается только около ста раз). Эти ключи, похоже, выбраны почти произвольно из списка, сопоставленного с шаблоном, например, следующим: 0, 383, 766, 2858, 3241, 5716 и т. Д.
Набор ключей, которые делают это, чтобы уменьшить, являются последовательными. то есть. Я получу 0, 383, 766 и т. Д. Последовательно при каждом запуске задачи. Однако, если я добавлю в систему вторую систему, набор ключей, через которые она будет проходить, полностью изменится!
Этап между «Map» и «Reduce» для меня немного загадка - и я действительно не уверен, где искать, так как моя функция Map работает точно так, как задумано (то есть вызывает 'output' «миллион раз). Кто-нибудь с большим опытом параллельной обработки имеет какие-либо идеи, где я должен искать, или что-нибудь, что может вызвать такое поведение?