综合了一下大家的答案:
1,Hadoop是离线计算,基于磁盘,每次运算之后的结果需要存储在HDFS里面,下次再用的话,还需要读出来进行一次计算,磁盘IO开销比较大。底层基于HDFS存储文件系统。适用于离线数据处理和不需要多次迭代计算的场景,并且Hadoop只有Map和Reduce两种接口,相对于Spark来说太少了。
2,Spark是内存计算框架,适用于多次迭代的计算模型,诸如各种机器学习算法
,Spark里面的一个核心的概念就是RDD,弹性分布式数据集。Spark支持内存计算模型,用户可以指定存储的策略,当内存不够的时候,可以放置到磁盘上。并且Spark提供了一组RDD的接口,Tran敏感词ormations和Action。Tran敏感词ormations是把一个RDD转换成为另一个RDD以便形成Lineage血统链,这样当数据发生错误的时候可以快速的依靠这种继承关系恢复数据。Action操作是启动一个Job并开始真正的进行一些计算并把返回的结果可以给Driver或者是缓存在worker里面。
3,MPI是消息传递接口,可以理解为是更原生的一种分布式模型
hadoop包括hdfs、mapreduce、yarn、核心组件。hdfs用于存储,mapreduce用于计算,yarn用于资源管理。 spark包括spark sql、saprk mllib、spark streaming、spark 图计算。saprk的这些组件都是进行计算的。spark sql离线计算,spark streaming 流计算,spark mllib机器学习。 mpi高性能计算。 hahoop只有mapreduce是和spark一样用来计算,要比较的话,只能比较mapreduce与spark区别。mapreduce叠代计算中间结果放在磁盘,适合大数据离线计算。spark技术先进,统一使用rdd,结果可放在内存,pipeline,计算速度比mapreduce快。 大数据存储使用hadoop的hdfs,资源管理用hadoop的yarn,计算使用spark或mpi
基于分布式文件系统HDFS的分布式批处理计算框架。适用于数据量大,SPMD(单程序多数据)的应用。
b) Spark
基于内存计算的并行计算框架。适用于需要迭代多轮计算的应用。
c) MPI
基于消息传递的并行计算框架。适用各种复杂应用的并行计算。支持MPMD( 多程序多数据) ,开发复杂度高