Спасибо за напоминание, честно говоря, мы были немного слабым на ведение блога о повышении производительности для этого. Надеюсь, мы сможем разобраться в ближайшем будущем. Однако я могу показать вам изображение с графика, который был сгенерирован в тестовом тесте, который был запущен. Ось y - это MB/s, а ось x - это # уникальных слов (во всех тестах она выполняла простое число слов). Блог должен показать больше деталей.
Эти тесты были все побежали с radargun [2] Кстати. Тест-драйвер для Map Reduce можно найти в [3] и распределенных потоках с помощью [4].
Но из графика Map/Reduce близок к производительности (на ~ 15-30% меньше, чем распределенные потоки), но как только промежуточные результаты росли в размерах, Map/Reduce упал и закончился из памяти. Спарк в этом случае также имел вдвое больше памяти, чем распределенные потоки (так что я немного боялся этих результатов). Но это должно быть подробно описано после того, как у нас будет сообщение в блоге.
Но в отношении того, почему распределенные потоки выполняются быстрее, самое главное, что мы используем потоки Java 8 Stream под капотом, которые обеспечивают хорошие хиты кэша процессора и низкие накладные расходы при переключении контекста с использованием пула соединений fork. Map/Reduce имеет много этих оптимизаций, но не хватает некоторых :)
Кроме того, не забывайте, что распределенные потоки полностью перефразируются, и вам не нужно беспокоиться о повторяющихся/потерянных записях, когда узел входит/уходит, как вы делаете с Map/Reduce. Вы также можете узнать больше о распределенных потоках в [5].
[2] https://github.com/radargun/radargun
[3] https://github.com/radargun/radargun/blob/master/extensions/mapreduce/src/main/java/org/radargun/stages/mapreduce/MapReduceStage.java
[4] https://github.com/radargun/radargun/blob/master/extensions/cache/src/main/java/org/radargun/stages/stream/StreamStage.java
[5] http://infinispan.org/docs/dev/user_guide/user_guide.html#streams
Спасибо за обмен некоторые идеи. Результаты будут зависеть от характера приложения/рабочей нагрузки и среды развертывания. Например, см. Аналогичные простые тесты, которые я запускал при первоначальной реализации MapReduce от Hazelcast против Infinispan 2 года назад - http://kkpradeeban.blogspot.com/2014/05/mapreduce-implementations-hazelcast-vs.html Я предполагаю, что MapReduce, используемый здесь, был внедрением Infinispan. Как этот масштаб? Сколько экземпляров в этом эксперименте? Если да, будут ли результаты изменяться/возвращаться в гораздо большем или меньшем масштабе? Использует ли это операции SIMD? –
Я жду сообщения в блоге, чтобы узнать больше об этом. :) –