Hadoop和Spark区别,为什么Spark比Hadoop处理速度快?

Hadoop和Spark区别,为什么Spark比Hadoop处理速度快?

一、原理区别

HadoopSpark
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倍。

 HadoopSpark
原理不同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分布式计算

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

提供了分布式计算引擎。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HadoopSpark 都是大数据处理框架,但它们各自的使用场景略有不同。 Hadoop 的使用场景: 1. 批处理:Hadoop 最初是为了处理离线批处理任务而设计的,例如网页索引、数据仓库等任务。HadoopMapReduce 模型可以处理大规模数据集,具有很好的可扩展性和容错性。 2. 存储:Hadoop 的分布式文件系统 HDFS 可以存储大规模数据集,支持高容错性和高可用性,适合存储大规模数据集。 3. 数据仓库:Hadoop 生态系统中的组件 Hive、HBase、Pig 等可以帮助构建数据仓库,支持 SQL 查询和大规模数据分析。 Spark 的使用场景: 1. 迭代计算Spark 的内存计算能力使其在迭代计算中表现出色。迭代计算通常涉及多次数据处理,例如机器学习算法、图计算等,Spark 在这些领域有很好的应用。 2. 实时流处理:Spark Streaming 可以将实时数据流转换为微批处理,支持实时数据处理和分析。 3. 复杂数据处理:Spark 支持复杂数据类型和数据结构,例如图形数据、图像数据等。 4. 与其他框架集成:Spark 可以与其他框架集成,例如 Hive、HBase、Kafka 等,可以扩展其应用范围。 总之,HadoopSpark 都有自己的适用场景,选择哪种框架取决于具体的需求和场景。如果需要批处理大量数据,Hadoop 可能是更好的选择;如果需要处理实时数据流或者进行迭代计算Spark 可能更适合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值