天天看点

《深入理解Spark:核心思想与源码分析》——3.7节创建和启动DAGScheduler

本节书摘来自华章社区《深入理解spark:核心思想与源码分析》一书中的第3章,第3.7节创建和启动dagscheduler,作者耿嘉安,更多章节内容可以访问云栖社区“华章社区”公众号查看

3.7 创建和启动dagscheduler

dagscheduler主要用于在任务正式交给taskschedulerimpl提交之前做一些准备工作,包括:创建job,将dag中的rdd划分到不同的stage,提交stage,等等。创建dag-scheduler的代码如下。

dagscheduler的数据结构主要维护jobid和stageid的关系、stage、activejob,以及缓存的rdd的partitions的位置信息,见代码清单3-32。

代码清单3-32 dagscheduler维护的数据结构

这里的dagscheduleractorsupervisor主要作为dagschedulereventprocessactor的监管者,负责生成dagschedulereventprocessactor。从代码清单3-34可以看出,dagscheduler-actorsupervisor对于dagschedulereventprocessactor采用了akka的一对一监管策略。dag-scheduleractorsupervisor一旦生成dagschedulereventprocessactor,并注册到actorsystem,actorsystem就会调用dagschedulereventprocessactor的prestart,taskscheduler于是就持有了dagscheduler,见代码清单3-35。从代码清单3-35我们还看到dag-schedulereventprocessactor所能处理的消息类型,比如jobsubmitted、beginevent、completionevent等。dagscheduler-eventprocessactor接受这些消息后会有不同的处理动作。在本章,读者只需要理解到这里即可,后面章节用到时会详细分析。

代码清单3-34 dagscheduleractorsupervisor的监管策略

继续阅读