Hadoop MapReduce против MPI (против Spark vs Mahout vs Mesos) - Когда использовать один над другим?

Я новичок в параллельных вычислениях и просто начинаю опробовать MPI и Hadoop + MapReduce на Amazon AWS. Но я смущен, когда использовать один над другим.

Например, одно общее правило, которое я вижу, можно суммировать как...

  • Большие данные, нетеративные, отказоустойчивые = > MapReduce
  • Скорость, небольшие данные, итеративный, не-Mapper-Reducer type = > MPI

Но затем я также вижу реализацию MapReduce на MPI (MR-MPI), которая не обеспечивает отказоустойчивости, но кажется более эффективным в некоторых тестах, чем MapReduce на Hadoop, и, похоже, обрабатывает большие данные с использованием встроенной памяти.

И наоборот, существуют также реализации MPI (MPICH2-YARN) для нового поколения Hadoop Yarn с его распределенной файловой системой (HDFS).

Кроме того, в MPI, как правило, есть положения (Scatter-Gather, Checkpoint-Restart, ULFM и другие отказоустойчивость), которые имитируют несколько особенностей парадигмы MapReduce.

И как Махут, Мезос и Спарк подходят ко всему этому?

Какие критерии могут быть использованы при выборе между (или комбинацией) Hadoop MapReduce, MPI, Mesos, Spark и Mahout?

Ответы

Ответ 1

Там могут быть хорошие технические критерии для этого решения, но я не видел ничего опубликованного на нем. Кажется, что существует культурный разрыв, когда он понимает, что MapReduce используется для просеивания данных в корпоративных средах, в то время как научная рабочая нагрузка использует MPI. Это может быть связано с низкой чувствительностью этих рабочих нагрузок к производительности сети. Вот несколько мыслей о том, как узнать:

Многие современные реализации MPI могут работать в нескольких сетях, но сильно оптимизированы для Infiniband. Канонический прецедент для MapReduce, похоже, находится в кластере "белых ящиков" товарных систем, подключенных через ethernet. Быстрый поиск по "MapReduce Infiniband" приводит к http://dl.acm.org/citation.cfm?id=2511027, который предполагает, что использование Infiniband в среде MapReduce является относительно новой вещью.

Итак, почему вы хотите запускать систему, оптимизированную для Infiniband? Это значительно дороже, чем Ethernet, но имеет более высокую пропускную способность, более низкую задержку и масштабирование в случаях высокой конкуренции в сети (ref: http://www.hpcadvisorycouncil.com/pdf/IB_and_10GigE_in_HPC.pdf).

Если у вас есть приложение, которое будет чувствительно к тем эффектам оптимизации для Infiniband, которые уже испекли во многих библиотеках MPI, возможно, это было бы полезно для вас. Если ваше приложение относительно нечувствительно к производительности сети и тратит больше времени на вычисления, которые не требуют связи между процессами, возможно, MapReduce - лучший выбор.

Если у вас есть возможность запускать тесты, вы можете сделать прогноз в зависимости от того, какая система у вас есть, чтобы увидеть, насколько поможет улучшенная производительность сети. Попробуйте дросселировать вашу сеть: downclock GigE до 100 мбит или QDDR от Infiniband до DDR, например, проведите линию по результатам и посмотрите, сможет ли покупка более быстрого межсоединения, оптимизированного MPI, получить вас туда, куда вы хотите пойти.

Ответ 2

Ссылка, которую вы опубликовали на FEM, сделана на MapReduce: http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=6188175&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D6188175

используется MPI. В нем говорится об этом прямо в реферате. Они объединили модель программирования MPI (не смущающую параллель) с HDFS, чтобы "сфазировать" данные, чтобы использовать локальность данных.

Hadoop чисто для неловко параллельных вычислений. Все, что требует процессов для организации себя и обмена данными сложными способами, получит хард-производительность с Hadoop. Это можно продемонстрировать как с точки зрения алгоритмической сложности, так и с точки зрения измерения.