2012-06-07 4 views
3

Есть уведомление о том, как оптимизируется каскадное/ошпаривание map-side evaluation Они используют так называемую частичную агрегацию. Действительно ли это лучше подходит тогда Комбинаторам? Есть ли какое-либо сравнение производительности для некоторых общих задач хаопа (например, количество слов)? Если это так будет поддерживать в будущем?Частичная агрегация против комбинаторов, которая быстрее?

ответ

1

На практике существует больше преимуществ частичной агрегации, чем от использования комбинаторов.

Ограниченные случаи, когда комбинаторы являются полезными. Кроме того, комбайнеры оптимизируют объем пропускной способности, требуемый задачами, а не количество сокращений - это тонкое различие, которое добавляет до значительных дельта производительности.

Существует более широкий спектр вариантов использования для частичной агрегации в больших распределенных рабочих процессах. Кроме того, частичная агрегация может использоваться для оптимизации количества шагов задания, необходимых для рабочего процесса.

Примеры показаны в https://github.com/Cascading/Impatient/wiki/Part-5, который использует CountBy и SumBy частичные агрегаты. Если вы оглянетесь в историю фиксации кода на GitHub для этого проекта, ранее использовалось GroupBy и Count, что привело к большему уменьшению.

0

Это лучше для определенного типа агрегатов. Каскадные агрегации немного более гибкие относительно того, что можно агрегировать. from the cascading site (emphasis mine):

каскадный не поддерживают так называемые MapReduce сумматоров. Комбинаторы очень мощные в том, что они уменьшают IO между Mappers и Reducers. Зачем отправлять все ваши данные Mapper в редукторы , когда вы можете вычислить некоторые значения на карте и объединить их в редукторе . Но Комбинированные ограничены Ассоциативными и коммутативными функциями, такими как «сумма» и «макс». И для того, чтобы работать, значения , испущенные из задачи «Карта», должны быть сериализованы, отсортированы (десериализованы и по сравнению), снова десериализованы и оперированы, где результаты сериализованы и отсортированы. Комбинаторы торгуют процессором для прироста в IO.

Cascading принимает другой подход, предоставляя механизм для Выполняет частичные агрегации Со стороны карты, а также объединяйте их Уменьшите сторону. Но Cascading выбирает trade Память для коэффициентов ввода-вывода путем кэширования значения (до порога). Этот подход обходит ненужные шаги сериализации, десериализации и сортировки . Он также позволяет использовать любую функцию агрегата, а не только Ассоциативную и Коммутативные.

+0

Я знаю это, я дал такую ​​же ссылку в своем вопросе. Но это теория, и я спрашиваю о практике. – yura