Spark背景
MapReduce的局限性
- 仅支持Map和Reduce两种操作,需要所有问题都转换成map和reduce,有些问题不好转换,代码比较冗余,编程不够灵活;
- 处理效率低:Map中间结果写磁盘,Reduce写HDFS,多个MR之间通过HDFS交换数据,所以Io开销大效率比较低;任务调度和启动开销大;无法充分利用内存;Map端和Reduce端均需要排序;
- 不适合迭代计算(如机器学习、图计算等),交互式处理(数据挖掘) 和流式处理(点击日志分析);
现有的各种计算框架各自为战
- 批处理:MapReduce、Hive、Pig
- 流式计算:Storm
- 交互式计算:Impala
Spark可以在一个统一的框架下,进行批处理、流式计算、 交互式计算
Spark特点
- 高效:内存计算引擎,可以选择写到内存还是写到硬盘,提供Cache机制来支持反复迭代计算或者多次数据共享,减少数据读取的IO开销;DAG引擎,减少多次计算之间中间结果写到HDFS的开销;使用多线程池模型来减少task启动开稍,shuffle过程中避免,不必要的sort操作以及减少磁盘IO操作,MR是进程式,每个TASK就是一个进程,需要启动一个JVM虚拟机,所以比较耗费资源,SAPK是