您的位置:首页 > 运维架构 > 网站架构

Spark的架构和任务调度

2017-11-23 22:54 211 查看
Spark的任务调度顺序:




1.首先我们会选择集群中的一台机器去提交我们的代码,我们提交的这个代码就是一个application
2.如果是client的模式,会在提交任务的这台机器上面开启一个driver线程,如果是cluster的模式,会随机选择一台机器开启driver线程,driver开启以后,就开始打算执行提交的代码,开启driver的时候对SparkContext进行初始化,因为SparkContext是程序执行的入口,初始化的内容是:启动一个DAGScheduler(面向stage进行任务调度),启动一个TaskScheduler(面向task进行任务调度)
3.TaskScheduler会向master去进行请求注册,master就接收到有任务执行的消息,master就会去找worker启动资源,也就是启动excuter
4.Excuter执行完后会向driver进行反向注册,这样driver就知道有哪些excuter为他服务。因为action操作会触发我们代码的真正的执行,一个action就对应一个job任务。这个job由DAGScheduler负责,DAGScheduler会根据stage划分算法把这个job划分为多个stage,DAGScheduler会为每个stage创建一个TaskSet(一个集合可以装多个task)
5.DAGScheduler把刚刚创建好的TaskSet集合发送给TaskScheduler,TaskScheduler将这些TaskSet发送到不同的excuter上面,发送之前要进行序列化,序列化以后文件会变小,这样在传送的过程中会减小带宽
当发送到excuter上面的时候要将task进行反序列化,反序列化后将task放进线程池里面包装成线程,这样task才能被执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: