1、产生背景,MR和Spark对比
1)编程
MR有局限性,编程繁杂,只提供了map和reduce方法,而spark是High-Level,提供了80多个算子
2)进程级别
MR中maptask和reducetask有很多的进程,进程启动和销毁要花大量的时间。
spark的task基于线程,在每一个executor中都有一个线程池。
3)资源申请
在MR中,每个job的maptask和reducetask都需要单独的申请资源 ,资源反复申请很耗时。
在spark中,无论一个应用程序有多少个job,只需要申请一次资源即可。
当然,spark资源的释放要所有job执行完才可以。
4)IO
MR基于磁盘和有限的内存,Spark基于内存。所以这就造成了IO上的差异。
MR的I/O频繁,比如Mapper和Reducer读取、溢写、merge、结果输出、shuffle、combiner
spark的I/O较少,数据读取、结果输出,可能存在的shuffle及持久化
spark是基于pipeline进行数据的处理的,一个stage内的一个task一次处理一条数据,处理完保存在内存中,然后处理下一条
5)排序
MR的执行流程中会进行排序,有些业务是不需要排序的
在spark中开启bypass机制可以避免排序
6)迭代处理
MR的迭代处理基于磁盘,每个job完成数据落盘,下一个job磁盘读取文件接着处理,且job间的衔接是需要程序员介入