1.3 Spark架构与运行逻辑
1.Spark的架构
·Driver:运行Application的main()函数并且创建SparkContext。
·Client:用户提交作业的客户端。
·Worker:集群中任何可以运行Application代码的节点,运行一个或多个Executor进程。
·Executor:运行在Worker的Task执行器,Executor启动线程池运行Task,并且负责将数据存在内存或者磁盘上。每个Application都会申请各自的Executor来处理任务。
·SparkContext:整个应用的上下文,控制应用的生命周期。
·RDD:Spark的基本计算单元,一组RDD形成执行的有向无环图RDD Graph。
·DAG Scheduler:根据Job构建基于Stage的DAG工作流,并提交Stage给TaskScheduler。
·TaskScheduler:将Task分发给Executor执行。
·SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。
2.运行逻辑
(1)Spark作业提交流程
如图1-3所示,Client提交应用,Master找到一个Worker启动Driver,Driver向Master或者资源管理器申请资源,之后将应用转化为RDD有向无环图,再由DAGScheduler将RDD有向无环图转化为Stage的有向无环图提交给TaskScheduler,由TaskScheduler提交任务给Executor进行执行。任务执行的过程中其他组件再协同工作确保整个应用顺利执行。
图1-3 Spark架构
(2)Spark作业运行逻辑
如图1-4所示,在Spark应用中,整个执行流程在逻辑上运算之间会形成有向无环图。Action算子触发之后会将所有累积的算子形成一个有向无环图,然后由调度器调度该图上的任务进行运算。Spark的调度方式与MapReduce有所不同。Spark根据RDD之间不同的依赖关系切分形成不同的阶段(Stage),一个阶段包含一系列函数进行流水线执行。图中的A、B、C、D、E、F,分别代表不同的RDD,RDD内的一个方框代表一个数据块。数据从HDFS输入Spark,形成RDD A和RDD C,RDD C上执行map操作,转换为RDD D,RDD B和RDD E进行join操作转换为F,而在B到F的过程中又会进行Shuffle。最后RDD F通过函数saveAsSequenceFile输出保存到HDFS中。
图1-4 Spark执行有向无环图