1. 速度
- spark把运算的中间数据存放在内存中,迭代效率更高;
- mapreduce的中间结果需要落盘,这样必然会涉及到IO,影响性能;
2. 容错性
- spark容错性高,它通过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某部分丢失或者出错,可以通过整个数据集的计算流程的血缘关系来重建。
- mapreduce的容错只能重新计算,成本较高。
3. 适用性
- spark更加通用,spark提供了transformation和action这两大类的多个API,另外还有流式处理sparkstreaming模块、图计算GraphX。
- mapreduce只提供map和reduce两种操作,流计算以及其他模块的支持比较缺乏。
4. 框架和生态
- Spark框架和生态更复杂适用范围更广,首先由RDD、血缘lineage、执行时的有向无环图DAG、stage划分等等,很多时候spark作业都需要根据不同的业务场景的需要进行调优,以达到性能要求。
- MR框架及其生态相对较为简单,对性能的要求也相对小弱,但是运行很稳定,适合长期后台运行及离线海量数据挖掘。
5. 运行环境
- spark大致有四种运行模式:local本地模式、standalone使用Spark自带的资源管理框架运行spark应用、yarn将spark应用提交到yarn上运行、mesos与yarn类似;
- MR运行在yarn上