Spark应用运行流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xu__cg/article/details/70037933

相关基本术语
-------------------------
Application:应用,即用户需要完成的应用程序。一般来说,这部分代码需要用户根据自己的需求来完成。这部分代码主要包括两部分:Driver和Executor。
Driver:顾名思义,驱动者,为Application准备运行环境,驱动并监控Application的运行。
Worker:当SparkContext申请到资源后,就会确定此应用程序在Cluster的哪些节点运行。运行Application的这些节点就叫做Worker。在并行计算中一个Application中会有多个Worker同时运行。
Executor:顾名思义,执行者。其实就是运行在Worker中的一个进程,负责此Worker上的Task的运行以及数据存储(内存或磁盘)。
Job:作业。多个并行计算的Task的集合,并且包含多个RDD及作用于相应RDD上的各种操作。
Stage:阶段。每个Job会被拆分成很多组Task。每组Task被称为Stage,所以TaskSet是Stage的表现形式。
Task:任务。它是在Worker上执行的最小单元。

 
Spark运行流程
----------------------

(1)构建Spark Application的运行环境。创建SparkContext后,SparkContext向资源管理器注册并申请资源。这里说的资源管理器有Standalone、Messos、YARN等。事实上,Spark和资源管理器关系不大,主要是能够获取Executor进程,并能保持相互通信。在SparkContext初始化过程中,Spark分别创建作业调度模块DAGScheduler和任务调度模块TaskScheduler(此例为Standalone模式下,在YARN-Client模式下任务调度模块为YarnClientClusterScheduler,在YARN-Cluster模式下为YarnClusterScheduler)。

(2)资源管理器根据预先设定的算法,在资源池里分配合适的Executor运行资源。在运行过程中,Executor运行情况将随着心跳信息发送到资源管理器上。考虑到Spark Application运行过程中SparkContext和Executor之间有大量信息的交换,提交Spark Context的Client应该靠近Worker节点,以方便信息传输。

(3)SparkContext构建DAG图(Directed Acyclic Graph,有向无环图),作业调度模块DAGScheduler将DAG图分解成Stage。DAGScheduler决定了运行Task的理想位置,并把这些信息连同Task本身传递给下层的TaskSchduler。

(4)Executor向SparkContext申请Task,告诉SparkContext,“我已经准备好了,请给我分配任务吧”。

(5)TaskScheduler维护所有TaskSet,当Driver收到Executor心跳时,TaskScheduler会根据其资源剩余情况分配相应的Task到Executor运行,同时SparkContext将应用程序代码发送给Worker,随后Task便开始在Worker上运行。在此期间,TaskScheduler还维护着所有Task的运行状态,重试失败的Task。如果Task失败是因为Shuffle数据丢失而引起的,则DAGScheduler需要重新提交运行之前的Stage;如果Shuffle数据没有丢失,则交给TaskScheduler处理。

(6)当Task运行结束后,反馈给SparkContext,并释放资源。
展开阅读全文

没有更多推荐了,返回首页