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分布式计算

不提供分布式文件存储管理,和其它分布式文件系统集成使用。

提供了分布式计算引擎。