Spark比MapReduce快的原因是什么

与 Hadoop 的 MapReduce 相比, Spark 基于内存的运算是 MapReduce 的 100 倍.基于硬盘的运算也要快 10 倍以上.
Spark 实现了高效的 DAG 执行引擎, 可以通过基于内存来高效处理数据流

那Spark为什么快呢?

1、消除了冗余的HDFS读写
Hadoop每次shuffle操作后,必须写到磁盘,而Spark在shuffle后不一定落盘,可以cache到内存中,以便迭代时使用,而且针对于spark-shuffle spark使用的是bypass的sortshuffle机制,进一步提高效率。如果操作复杂,很多的shufle操作,那么Hadoop的读写IO时间会大大增加,相对的spark就很快。
2、消除了冗余的MapReduce阶段
Hadoop的shuffle操作一定连着完整的MapReduce操作,冗余繁琐。而Spark基于RDD提供了丰富的算子操作,且reduce操作产生shuffle数据,可以缓存在内存中。
3、JVM的优化
Hadoop每次MapReduce操作,启动一个Task便会启动一次JVM,基于进程的操作。而Spark每次MapReduce操作是基于线程的,只在启动Executor是启动一次JVM,内存的Task操作是在线程复用的。每次启动JVM的时间可能就需要几秒甚至十几秒,那么当Task多了,这个时间Hadoop不知道比Spark慢了多少。
4.序列化方式
Spark序列化方式提供了kryo序列化–是一种轻量级的序列化,MR只有java的序列化–重量级。
5. DAG Scheduler
Spark 计算比 MapReduce 快的根本原因在于 DAG 计算模型。一般而言,DAG 相比MapReduce 在大多数情况下可以减少 shuffle 次数。Spark 的 DAGScheduler 相当于一个改进版的 MapReduce,如果计算不涉及与其他节点进行数据交换,Spark 可以在内存中一次性完成这些操作,也就是中间结果无须落盘,减少了磁盘 IO 的操作。

补充spark与mr的对比:
从计算模型来看,Hive是基于磁盘的,而Spark是基于内存的。
这就意味着在处理数据时,Spark可以减少shuffle的次数,因此通常比Hive更快。然而,由于Spark将中间结果写到内存中,因此对于需要频繁读写中间结果的迭代计算,Spark格外适用。
而Spark则是基于多线程模型,可以更好地利用多核CPU,提高处理效率。
 
1 本质区别:Spark除了需要shuffle的计算,其他是将结果/中间结果持久化到内存中,而MR是都需要落地到磁盘(map.reduce落地都写),因此Spark格外适用于频繁读写中间结果的迭代计算
2 资源:MR是基于进程,Spark是基于线程。MR是多进程单线程模型,而Spark是多进程多线程模型;

3 并行度:此外,速度区别之二在于任务的并行度不同:
Spark会增加任务的并行度从而提高速度:由于将中间结果写到磁盘与从磁盘读取中间结果属于不同的环节,MR只是将它们简单的通过串行执行衔接起来。而Spark把不同的环节抽象为Stage,允许多个Stage既可以串行执行,又可以并行执行。

saprk on hive 和 hive on spark
spark on hive:hive只负责存储角色,spark负责解析sql优化 执行
hive on spark:hive既作为存储又负责sql的解析优化,spark负责执行.
mrshuffle和sparkshuffle区别
区别:
1 本质上相同,都是把map端数据分类处理后交给reduce过程
2 数据流有所区别,mr是map/spill/merge/shuffle/sort/reduce 等各阶段逐一实现,spark是基于DAG数据流,可以实现更为复杂的数据流操作(宽窄依赖)
窄依赖不需要对分区数据进行 shuffle (父子一一对应),而宽依赖需要(父子一对多,也叫shuffle依赖)。所以窄依赖都会在一个 stage 中, 而宽依赖会作为 stage 的交界处。
 对于宽依赖是划分Stage的依据,产生Shuffle。例如GroupByKey,reduceByKey,join,sortByKey等操作。
Spark中的DAG
DAG:全称为 Directed Acyclic Graph 中文为:有向无环图。在spark中,使用DAG来描述我们的计算逻辑。
DAG是一组顶点与边的组合,顶点代表RDD,边代表对RDD的一系列操作。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值