Spark 为啥比 MapReduce 快?
DAG优化 和 内存
(1) 算子灵活性:MR只支持Map和Reduce 两种操作,而Spark有丰富的算子。
(2) Map 中间结果写磁盘,Reduce 写HDFS,多个MR之间通过HDFS交换数据。
(3) DAG引擎,先划分为Stage,Stage之间才Shuffle落盘,Stage之内,都可以内存处理。
(4) spark 中的rdd数据可以缓存到内存中,充分使用内存,多次使用,减少IO。
进程和线程
(1) MR的任务调度和启动都是进程级别的,每个进程都是JVM,资源和时间开销都很大。
(2) spark开启的JVM是Driver和Executor,每个Executor内部可以在每个core上都生成一个task,spark的task是基于线程的,线程池模型有效减少task的启动开销,一个executor上可以占用多个core,每最终task并行度为executor * core的数量。
Shuffle
(2) MR的Map端和Reduce端均需要排序。Spark在Shuffle过程中,尽量避免不必要的Sort操作。
一、Spark算子 VS MapReduce算子
MR只有Map 和 Reduce 两种操作。而spark基于RDD构建了丰富的算子。
RDD:Resilient Distribute DataSets,分布式弹性数据集
(1)RDD是分布于集群中的,有多个Partition组成的只读对象集合。
(2)支持内存、磁盘等多种存储级别。
(3)通过并行的 Transform 操作,逐步构建需要的结果。
(4)通过Lineage血统体系,支持自动重构。
Transform操作:生成新的RDD
PartitionBy ,map, filter,groupBy,reduceBy ,reduceByKey
Action 操作:获取一个或者一组值
count,reduce,saveAsTextFile
## 二、Spark Shuffle VS MR Shuffle
MapReduce Shuffle过程
1、首先 map 在做输出时候会在内存里开启一个环形内存缓冲区,专门用来做输出,同时map还会启动一个守护线程;
2、如缓冲区的内存达到了阈值的80%,守护线程就会把内容写到磁盘上&