Hadoop和Spark区别,为什么Spark比Hadoop处理速度快?
一、原理区别
Hadoop | Spark |
MapReduce原理 | DAG有向无环图更精致的MR实现。 |
1、Hadoop MapReduce原理
Hadoop作业称为Job,Job分为Map、Shuffle和Reduce阶段,MAP和Reduce的Task都基于JVM进程运行的。MAP阶段:从HDFS读取数据,split文件产生task,通过对应数量的Map处理,map输出的每一个键值对通过key的hash值计算一个partition,数据通过环形缓冲区,sort、spill、merge生成data和index文件;
Reduce阶段:reduce通过Shuffle Copy属于自己的那部分数据,然后sort、spill、merge形成一个大文件,调用reduce函数进行处理。
MapReduce过程详解及其性能优化
2、Spark DAG有向无环图是更精致的MR实现。
Spark任务称为Application,一个Application对应一个SparkContext,可能存在多个job,每触发一次action操作就会产生一个job。这些job可以并行或串行执行,每个Job Driver中的DAGScheduler通过RDD的宽窄依赖关系划分stage,通过TaskSetManger管理当前运行的taskset,Driver向ExecutorBackend发送launchTask交给Executor,Executor收到task执行任务,将其封装在TaskRunner中交给线程池的线程执行。每个stage内部是pipeline方式执行,stage之间会产生shuffle,最后一个stage里面的task叫ResultTask,其它相对后面的都叫ShuffleMapTask。ShuffleMapTask根据具体的ShuffleManager写入具体文件,后会把MapStaus汇报给Driver的MapOutputTracker(会把结果交给ResultTask);executor的生命周期是和application一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存进行计算。
二、处理速度区别
处理速度:Spark处理速度比Hadoop快10~100倍。
| Hadoop | Spark |
原理不同 | MapReduce原理 | DAG有向无环图更精致的MR实现。 |
资源使用不同 | 基于JVM进程 | 线程复用 |
中间数据存储不同 | 基于磁盘进行数据迭代处理 | 基于内存的数据迭代处理 |
资源管理方式不同 | 细粒度资源申请 | 粗粒度资源申请 |
Hadoop
(1)MR原理如上,以JVM为对象的并发的map,执行产生文件落盘,Shuffle,交给reduce执行,构造复杂算法不利于算法实现。
(2)基于JVM进程,资源申请释放开销比较大;
(3)基于磁盘进行数据迭代处理,中间结果保存在文件中,提高了可靠性,减少了内存占用,但是也降低了性能;
(4)MapReduce是细粒度资源申请,当提交job的时候,task执行时,自己申请资源,自己释放资源,task执行完毕之后,资源立即会被释放,task执行的慢,job执行的相对比较慢。优点是集群资源得到充分利用,缺点是application执行的相对比较慢。
Spark
(1)是MR更精致的实现,基于DAG有向无环图的计算模式。stage内部是pipeline:无需等待,可最大化使用集群资源;减少OOM发生;可以精准控制每个partition依赖及其内部计算;基于lineage的算子流动式函数编程,节省中间结果产生,并可以最快恢复。
(2)基于线程的复用,轻量级别的;
(3)基于内存的数据迭代处理,充分利用内存,缓存数据,内存中进行数据交换速度快;
(4)spark是粗粒度资源申请,也就是当提交spark application的时候,application会将所有的资源申请完毕,如果申请不到资源就等待,如果申请到资源才执行application,task在执行的时候就不需要自己去申请资源,task执行快,当最后一个task执行完之后task才会被释放。
优点是执行速度快,缺点是不能使集群得到充分的利用
三、容错恢复
Hadoop | Spark |
将每次处理后的数据写入磁盘中,对应对系统错误具有天生优势 | RDD:弹性分布式数据集(位置感知,容错,负载均衡) (1)自动进行内存和磁盘数据的切换; (2)基于lineage的高容错; (3)task失败会自动进行特定次数的重试; (4)stage失败也会进行固定次数的重试,而且只计算失败的分片。 |
四、数据的存储和处理
Hadoop | Spark |
提供了HDFS分布式数据存储功能 提供了MapReduce分布式计算 | 不提供分布式文件存储管理,和其它分布式文件系统集成使用。 提供了分布式计算引擎。 |