为什么大多情况Spark比MapReduce快?

提问者:帅平 问题分类:面试刷题
为什么大多情况Spark比MapReduce快?
3 个回答
爱你的小笨蛋
爱你的小笨蛋
jvm上的区别在于:
1、Hadoop每次的MapReduce操作,启动一个Task便会启动一次JVM,基于进程的操作。
2、Spark每次MapReduce操作是基于线程的,只在启动Executor时启动一次JVM,内存的Task操作是在线程复用的。
3、mapreduce的任务它是以进程的方式运行在yarn集群中,比如一个job有1024个MapTask,这个时候就需要开启1024个进程去处理这个1024个task,可是启动一个task便会启动一次JVM。spark的任务它是以线程的方式运行在进程中,只在启动Executor进程时启动一次JVM。每次执行一个task,都是复用Executor进程中的线程(Executor中维护着一个线程池)。JVM的每次启动,都将会花费几秒甚至是十几秒的时间.如果task多了,基于进程的MR便会频繁的启动JVM,也就花费了大量启JVM的时间。
发布于:3个月前 (01-22) IP属地:四川省
巴黎小甜心
巴黎小甜心
shuffle上的区别在于:
1、MapReduce在Shuffle时需要花费大量时间进行排序,排序在MapReduce的Shuffle中似乎是不可避免的;
2、Spark在Shuffle时则只有部分场景才需要排序,支持基于Hash的分布式聚合,更加省时;
发布于:3个月前 (01-22) IP属地:四川省
兮和
兮和
Spark和MapReduce的计算都发生在内存中,区别在于:
1、MapReduce通常需要将计算的中间结果写入磁盘,然后还要读取磁盘,从而导致了频繁的磁盘IO。
2、Spark通常不需要将计算的中间结果写入磁盘,只有shuffle时或中间结果内存存不下才落盘。这得益于Spark的RDD(弹性分布式数据集,很强大)和DAG(有向无环图),其中DAG记录了job的stage以及在job执行过程中父RDD和子RDD之间的依赖关系。中间结果能够以RDD的形式存放在内存中,且能够从DAG中恢复,大大减少了磁盘IO。
因此是park比mapreduce快
发布于:3个月前 (01-22) IP属地:四川省
我来回答