数据处理方式不同
spark在运算中数据是在内存中进行存放的,不需要落地在磁盘中,所以它数据处理数据比较快,迭代的比较快;而MapReduce在运算中数据需要在中间落地到磁盘中,也就是Map阶段处理完成需要放到磁盘中,再由reduce阶段从磁盘中拉取数据再进行处理,处理完成后数据再次存放到磁盘中,因为频繁的IO操作,影响性能
通用性不同
spark通用性比较强,为我们提供了两大类多功能的API,也就是我们的Transformation和Action,除了,还有流处理,图计算等等,而MapReduce只有Map和reduce两种操作
容灾性不同
如果从容灾角度来看,都很不错MapReduce每次处理完都写入磁盘,所以天生就很有弹性的对系统错误进行处理;spark的数据对象存储在分布式集群上叫RDD,这些数据对象既可以在内存,也可以在磁盘,所以RDD也有灾难恢复功能,以及可以设置持久化
容错性不同
spark有基于血统的关系来进行重新计算,而MapReduce只能从头开始计算
操作难度不同
spark框架更加复杂,有RDD,血缘关系,DAG有向无环图等等,很多时候spark根据不同的业务场景进行调优;而MapReduce较为简单,对性能的要求也比较弱,更适合长期在后台运行
Shuffle 机制不同
Hadoop Shuffle:通过Map端处理的数据到Reduce端的中间的过程就是Shuffle
Spark Shuffle:在DAG调度过程中,stage阶段的划分是根据shuffle过程,也就是存在ShuffleDependency宽窄依赖的时候,需要进行shuffle,(这时候会将作业Job划分成多个stage;并且在划分stage的时候,构建shuffleDependency的时候进行shuffle注册,获取后续数据读取所需要的shuffleHandle),最终每一个Job提交后都会生成一个ResultStage和若干个ShuffleMapStage
领取专属 10元无门槛券
私享最新 技术干货