Перейти к основному содержимому
Перейти к основному содержимому

Почему не использовать что-то вроде MapReduce?

Мы можем отнести такие системы, как MapReduce, к распределенным вычислительным системам, в которых операция редукции основана на распределенной сортировке. Наиболее распространенным решением с открытым исходным кодом в этой категории является Apache Hadoop.

Эти системы не подходят для онлайн-запросов из-за высокой задержки. Другими словами, их нельзя использовать в качестве бэкенда для веб-интерфейса. Эти типы систем не полезны для обновлений данных в реальном времени. Распределенная сортировка не является наилучшим способом выполнения операций редукции, если результат операции и все промежуточные результаты (если таковые имеются) находятся в оперативной памяти одного сервера, что обычно имеет место для онлайн-запросов. В таком случае хэш-таблица является оптимальным способом выполнения операций редукции. Общий подход к оптимизации задач map-reduce заключается в предагрегации (частичной редукции) с использованием хэш-таблицы в оперативной памяти. Пользователь выполняет эту оптимизацию вручную. Распределенная сортировка является одной из основных причин снижения производительности при выполнении простых задач map-reduce.

Большинство реализаций MapReduce позволяют выполнять произвольный код на кластере. Но декларативный язык запросов лучше подходит для OLAP для быстрого проведения экспериментов. Например, у Hadoop есть Hive и Pig. Также стоит рассмотреть Cloudera Impala или Shark (устаревший) для Spark, а также Spark SQL, Presto и Apache Drill. Производительность при выполнении таких задач значительно ниже оптимальной по сравнению со специализированными системами, но относительно высокая задержка делает нереалистичным использование этих систем в качестве бэкенда для веб-интерфейса.