一 Spark为啥比Hadoop MapReduce有更快的执行速度?
1)RDD的编程模型更简单。
MapReduce编程模型是面向过程编程,RDD编程模型是面向对象(RDD)编程。
2)DAG切分的多阶段计算过程更快速。
MapReduce简单粗暴的根据shuffle将大数据计算分成Map和Reduce两个阶段。
Spark会更细腻一点,将前一个Reduce和后一个Map连接起来,当做一个阶段持续计算,形成一个更加优雅、高效的计算模型。这种多个计算阶段依赖的方案可以有效减少对HDFS的访问,减少作业的调度执行次数,因此执行速度也更快。
3)使用内存存储中间计算结果更高效。
MapReduce主要使用磁盘存储shuffle过程中的中间数据。
Spark优先使用内存进行存储,包括RDD数据。
二 Spark的执行过程
1)Spark应用程序启动在Driver进程,启动后调用SparkContext初始化执行配置和输入数据。SparkContext其中DAGScheduler构造DAG图,切分成最小的执行单位,也就是计算任务。
2)Driver向Cluster Manager请求计算资源,用于DAG的分布式计算。Cluster Manager收到请求后,将Driver的主机地址等信息通知给集群所有Worker节点。
3)Worker节点收到信息后,根据Driver的主机地址,跟Driver通信注册,然后根据自己的空闲资源向Driver通报袭击可以领用的任务数。Driver根据DAG图开始向注册的Worker分配任务。
4)Worker收到任务后,启动Executor进程开始执行任务。Executor首先检查自己是否有Driver的执行代码,如果没有,从Driver下载代码。