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