Spark资源调度和任务调度
2022-09-22 19:44:39 0 举报
Spark资源调度和任务调度,只是自身对spark浅层理解
作者其他创作
大纲/内容
3. 反向注册
retry failed or straggling tasks
Spark资源调度
execute tasks
doesn 't hnow about stages
DAGScheduler 的主要作用就是将 DAG 根据 RDD 之间的宽窄依赖关系划分为一个个的 Stage ,然后将这些 Stage 以 TaskSet 的形式提交给 TaskScheduler
5../spark-submit --master url://port
Task
( TaskScheduler 是任务调度的低层调度器,这里 TaskSet 其实就是一个集合,里面封装的就是一个个的 task 任务,也就是 stage 中的并行的 task 任务)。
9.为当前和的Application请求资源
tasks
Threads
Client
5. Worker接受Master的命令启动一个Executor进程
build operator DAG
submiteachstage as ready
TaskSet
注意: 1. 对于 ETL 类型要入数据库的业务要关闭推测执行机制,这样就不会有font color=\"#f44336\
agnostic to operators!
2. SSH
stage 失败了则由 DAGScheduler 来负责重试,重新发送 TaskSet 到TaskScheduler , Stage 默认重试4次。如果重试4次以后依然失败,那么这个 job 就失败了。 job 失败了, Application 就失败了
stage failed
Clustermanager
2. 掌握集群中所有资源的情况
1. 启动集群后, Worker 节点会向 Master 节点汇报资源情况, Master 掌握了集群资源情况。2. 当 Spark 提交一个 Application 后,根据 RDD 之间的依赖关系将 Application 形成一个 DAG 有向无环图。3. 任务提交后, Spark 会在 Driver 端创建两个对象: DAGScheduler 和 TaskScheduler ,DAGScheduler 是任务调度的高层调度器,是一个对象。4. TaskSchedule 会遍历 TaskSet 集合,拿到每个 task 后会将 task 发送到 Executor 中去执行(其实就是发送到 Executor 中的线程池 ThreadPool 去执行)。5. task 在 Executor 线程池中的运行情况会向 TaskScheduler 反馈,当 task 执行失败时,则由TaskScheduler 负责重试,将 task 重新发送给Executor 去执行,默认重试3次。如果重试3次依然失败,那么这个 task 所在的 stage 就失败了。
node2:Worker
node3:Worker
通过集群管理器启动任务
rdd1.join(rdd2).groupby(...).filter
Spark任务调度
1../start-all.shval workers = new HashSet[Worklnfo] 4.val waitingDriver = new ArrayBuffer[Driverlnfo] 5.val waitingApps = new ArrayBuffer[Application] 10
DAGScheduler
launch tasks viacluster manager
重试失败或分散的任务
1. Worker启动后向Master注册
TaskScheduler
DAG
ThreadPool
Master
Worker
node01:Master
RDD Objects
store and serve blocks
Driver(JVM进程)
执行任务
8. DriverWarrap
Blockmanager
split graph intostages of tasks
存储和服务区块
收藏
收藏
0 条评论
下一页