分布式计算和并行计算差异

Mapreduce是分布式计算的典型技术,MPI则是并行计算的典型技术。总结下来主要两点区别:
1、分布式计算(如MapReduce)的计算节点任务往往是独立的,松散的。不涉及大规模的数据交互,因此节点之间运行几乎互不影响。体现到技术架构上就使得可以做到计算和存储在同一个节点上,不存在计算节点拉取大量存储数据的情况,因此也就不需要技术架构提供内部专用的高速网络。但这同时也导致分布式计算本身的计算模型比较简单,比如Mapreduce就是确定分拆和合并两个大的步骤。

一个典型的分布式计算场景就是搜索。用户输入一个关键字后,计算任务就被下发到存储所有网页关键字的分布式计算平台上,平台上每个节点都存储了不同的信息,然后分别从每个节点的本地存储上计算出搜索相关网页URL,再讲结果合并成需要展示给用户的URL列表。每个节点上搜索的过程是独立的,因此可以在节点计算完后将结果汇总起来。中间无需各节点互相通信。

2、并行计算则需要在计算过程中多个进程(计算任务)有频繁的交互。比如C++的MPI框架在使用时需要开发者考虑多个进程之间的通信机制,优化的越好效率越高。因此,技术架构上MPI是一种计算和存储分离的架构,计算节点需要从存储节点拉取数据,进一步带来的需求就是高性能计算(HPC)往往都需要有专门的计算集群内部高速网络来支持节点间的高速通信和数据拉取工作;同时,需要一套共享存储(如NAS)。
下面一张图简单介绍了并行计算的过程,其中可以看到communicate这一步实际上涉及了大量的相互通信,这个是MPI接口规范可以支持开发的。
在这里插入图片描述

3、MPI、Hadoop和Spark区别
易用性上MPI<Hadoop<Spark。Spark的接口比Hadoop简洁,表达力比Hadoop强,性能也比Hadoop好,在做Machine Learning / Data analytics 方面的工作,Spark是最好的选择。而MPI则是更原生的分布式开发框架,如果有专门的技术团队,可以考虑用MPI框架自己开发代码和优化,性能应该是最好的。Hadoop与Spark比的话,如果是一次性批量处理的任务,Spark没有明显优势,如果是迭代型(iterative)算法(大部分机器学习都是迭代的),那么Spark就有很大的优势。
另外,Spark可以基于HDFS部署,也可以基于其它分布式存储平台,当然默认都是基于HDFS的。Hadoop的Mapreduce在处理分布式计算时每次中间结果是要写会硬盘的,而Spark不会,因此Spark比MR要快的多。

MPI参考:https://blog.csdn.net/KevinBetterQ/article/details/77095337
MPI开发示例:https://blog.csdn.net/zhaodedong/article/details/73441318?utm_source=blogxgwz2
MPI、Hadoop、Spark对比:
https://blog.csdn.net/forward__/article/details/78770466
https://blog.csdn.net/u010159842/article/details/49055549?utm_source=blogxgwz2

猜你喜欢

转载自blog.csdn.net/qq_36718740/article/details/83474302