Я новичок в параллельных вычислениях и просто начинаю опробовать 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?