-
构建Spark Application的运行环境。创建SparkContext后,SparkContext向资源管理器注册并申请资源。这里说的资源管理器有Standalone、Messos、YARN等。事实上,Spark和资源管理器关系不大,主要是能够获取Executor进程,并能保持相互通信。在SparkContext初始化过程中,Spark分别创建作业调度模块DAGScheduler和任务调度模块TaskScheduler(此例为Standalone模式下,在YARN-Client模式下任务调度模块为YarnClientClusterScheduler,在YARN-Cluster模式下为YarnClusterScheduler)。
-
资源管理器根据预先设定的算法,在资源池里分配合适的Executor运行资源。在运行过程中,Executor运行情况将随着心跳信息发送到资源管理器上。考虑到Spark Application运行过程中SparkContext和Executor之间有大量信息的交换,提交Spark Context的Client应该靠近Worker节点,以方便信息传输。
-
SparkContext构建DAG图(Directed Acyclic Graph,有向无环图),作业调度模块DAGScheduler将DAG图分解成Stage。DAGScheduler决定了运行Task的理想位置,并把这些信息连同Task本身传递给下层的TaskSchduler。
-
Executor向SparkContext申请Task,告诉SparkContext,“我已经准备好了,请给我分配任务吧”。
-
TaskScheduler维护所有TaskSet,当Driver收到Executor心跳时,TaskScheduler会根据其资源剩余情况分配相应的Task到Executor运行,同时SparkContext将应用程序代码发送给Worker,随后Task便开始在Worker上运行。在此期间,TaskScheduler还维护着所有Task的运行状态,重试失败的Task。如果Task失败是因为Shuffle数据丢失而引起的,则DAGScheduler需要重新提交运行之前的Stage;如果Shuffle数据没有丢失,则交给TaskScheduler处理。
-
当Task运行结束后,反馈给SparkContext,并释放资源。
spark应用转换流程
最新推荐文章于 2021-10-17 17:27:05 发布