1、产生背景
1、产生背景:
MapReduce的差劲促使了spark的产生。
1)编程:
MR只有只提供给map和reduce方法处理数据,而spark中提供了80多个。
这对编程产生了质的影响:
就比如对于一个wordcount,既要写Map,又要写Reduce和驱动类。
而spark只需要一个类就可以解决,运用scala开发设置一行代码就可以搞定。
2)task级别:
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及持久化
综上:
理想情况下,一次MR4次IO,一次spark 作业两次IO
IO是很昂贵的操作,耗时间耗性能&#