基础概念
RDD:弹性分布式数据集(Resilient Distributed Dataset)它是分布式内存的抽象概念,可以理解成spark的对象,在spark当中都是对RDD进行读写,计算,是sprak当中的核心。
DAG:Directed Acyclic Graph(有向无环图)这个比较好理解,在图论当中,如果从一个点触发经过若干条边以后,没有回到这个点,就是有向无环图。DAG在spark当中主要是反应RDD之间关系的一种图结构。
Executor:spark的工作进程。
Task:运行在Executor上的一个工作单元。
Job:一个Job对应多个RDD以及对RDD的操作。
阶段:一个Job可以被分为多个阶段,每一个阶段我们就称之为阶段吧~~~~
架构设计
Spark的运行架构基本如上图所示,基本上就是通过Cluster Manager 集群管理器来调度SparkContext(需要执行的计算程序)分配给Worker Node(线程)然后执行这些任务。这里和hadoop的MapReduce有个区别,Hadoop使用的是进程模型,Spark才用的是线程模型,可以减少执行任务时候的开销。
运行流程
总结
(1)每个应用都有自己专属的Executor进程,并且该进程在应用运行期间一直驻留。Executor进程以多线程的方式运行任务,减少了多进程任务频繁的启动开销,使得任务执行变得非常高效和可靠;
(2)Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可;
(3)Executor上有一个BlockManager存储模块,类似于键值存储系统(把内存和磁盘共同作为存储设备),在处理迭代计算任务时,不需要把中间结果写入到HDFS等文件系统,而是直接放在这个存储系统上,后续有需要时就可以直接读取;在交互式查询场景下,也可以把表提前缓存到这个存储系统上,提高读写IO性能;
(4)任务采用了数据本地性和推测执行等优化机制。数据本地性是尽量将计算移到数据所在的节点上进行,即“计算向数据靠拢”,因为移动计算比移动数据所占的网络资源要少得多。而且,Spark采用了延时调度机制,可以在更大的程度上实现执行过程优化。