Есть уведомление о том, как оптимизируется каскадное/ошпаривание map-side evaluation Они используют так называемую частичную агрегацию. Действительно ли это лучше подходит тогда Комбинаторам? Есть ли какое-либо сравнение производительности для некоторых общих задач хаопа (например, количество слов)? Если это так будет поддерживать в будущем?Частичная агрегация против комбинаторов, которая быстрее?
ответ
На практике существует больше преимуществ частичной агрегации, чем от использования комбинаторов.
Ограниченные случаи, когда комбинаторы являются полезными. Кроме того, комбайнеры оптимизируют объем пропускной способности, требуемый задачами, а не количество сокращений - это тонкое различие, которое добавляет до значительных дельта производительности.
Существует более широкий спектр вариантов использования для частичной агрегации в больших распределенных рабочих процессах. Кроме того, частичная агрегация может использоваться для оптимизации количества шагов задания, необходимых для рабочего процесса.
Примеры показаны в https://github.com/Cascading/Impatient/wiki/Part-5, который использует CountBy
и SumBy
частичные агрегаты. Если вы оглянетесь в историю фиксации кода на GitHub для этого проекта, ранее использовалось GroupBy
и Count
, что привело к большему уменьшению.
Это лучше для определенного типа агрегатов. Каскадные агрегации немного более гибкие относительно того, что можно агрегировать. from the cascading site (emphasis mine):
каскадный не поддерживают так называемые MapReduce сумматоров. Комбинаторы очень мощные в том, что они уменьшают IO между Mappers и Reducers. Зачем отправлять все ваши данные Mapper в редукторы , когда вы можете вычислить некоторые значения на карте и объединить их в редукторе . Но Комбинированные ограничены Ассоциативными и коммутативными функциями, такими как «сумма» и «макс». И для того, чтобы работать, значения , испущенные из задачи «Карта», должны быть сериализованы, отсортированы (десериализованы и по сравнению), снова десериализованы и оперированы, где результаты сериализованы и отсортированы. Комбинаторы торгуют процессором для прироста в IO.
Cascading принимает другой подход, предоставляя механизм для Выполняет частичные агрегации Со стороны карты, а также объединяйте их Уменьшите сторону. Но Cascading выбирает trade Память для коэффициентов ввода-вывода путем кэширования значения (до порога). Этот подход обходит ненужные шаги сериализации, десериализации и сортировки . Он также позволяет использовать любую функцию агрегата, а не только Ассоциативную и Коммутативные.
Я знаю это, я дал такую же ссылку в своем вопросе. Но это теория, и я спрашиваю о практике. – yura