当前位置:网站首页>spark的资源调度和任务调度
spark的资源调度和任务调度
2022-06-28 09:00:00 【学无止境王小帅】
Spark资源调度和任务调度

- Spark资源调度和任务调度的流程:
启动集群后,Worker节点会向Master节点汇报资源情况,Master掌握了集群资源情况。当Spark提交一个Application后,根据RDD之间的依赖关系将Application形成一个DAG有向无环图。任务提交后,Spark会在Driver端创建两个对象:DAGScheduler和TaskScheduler,DAGScheduler是任务调度的高层调度器,是一个对象。DAGScheduler的主要作用就是将DAG根据RDD之间的宽窄依赖关系划分为一个个的Stage,然后将这些Stage以TaskSet的形式提交给TaskScheduler(TaskScheduler是任务调度的低层调度器,这里TaskSet其实就是一个集合,里面封装的就是一个个的task任务,也就是stage中的并行度task任务),TaskSchedule会遍历TaskSet集合,拿到每个task后会将task发送到计算节点Executor中去执行(其实就是发送到Executor中的线程池ThreadPool去执行)。task在Executor线程池中的运行情况会向TaskScheduler反馈,当task执行失败时,则由TaskScheduler负责重试,将task重新发送给Executor去执行,默认重试3次。如果重试3次依然失败,那么这个task所在的stage就失败了。stage失败了则由DAGScheduler来负责重试,重新发送TaskSet到TaskSchdeuler,Stage默认重试4次。如果重试4次以后依然失败,那么这个job就失败了。job失败了,Application就失败了。
TaskScheduler不仅能重试失败的task,还会重试straggling(落后,缓慢)task(也就是执行速度比其他task慢太多的task)。如果有运行缓慢的task那么TaskScheduler会启动一个新的task来与这个运行缓慢的task执行相同的处理逻辑。两个task哪个先执行完,就以哪个task的执行结果为准。这就是Spark的推测执行机制。在Spark中推测执行默认是关闭的。推测执行可以通过spark.speculation属性来配置。
注意:
- 对于ETL类型要入数据库的业务要关闭推测执行机制,这样就不会有重复的数据入库。
- 如果遇到数据倾斜的情况,开启推测执行则有可能导致一直会有task重新启动处理相同的逻辑,任务可能一直处于处理不完的状态。
- 图解Spark资源调度和任务调度的流程

- 粗粒度资源申请和细粒度资源申请
- 粗粒度资源申请(Spark)
在Application执行之前,将所有的资源申请完毕,当资源申请成功后,才会进行任务的调度,当所有的task执行完成后,才会释放这部分资源。
优点:在Application执行之前,所有的资源都申请完毕,每一个task直接使用资源就可以了,不需要task在执行前自己去申请资源,task启动就快了,task执行快了,stage执行就快了,job就快了,application执行就快了。
缺点:直到最后一个task执行完成才会释放资源,集群的资源无法充分利用。
- 细粒度资源申请(MapReduce)
Application执行之前不需要先去申请资源,而是直接执行,让job中的每一个task在执行前自己去申请资源,task执行完成就释放资源。
优点:集群的资源可以充分利用。
缺点:task自己去申请资源,task启动变慢,Application的运行就相应的变慢了。
边栏推荐
- Implement global double finger long press to return to the desktop
- Superimposed ladder diagram and line diagram and merged line diagram and needle diagram
- 罗氏线圈工作原理
- 中金财富开户安全吗?怎么收费?
- 基于宽表的数据建模
- Wasmedge 0.10.0 release! New plug-in extension mechanism, socket API enhancement, llvm 14 support
- [untitled]
- Find the total number of 1 appearing in the integer 1-N and the number of 1 in the binary of the integer
- Copy & Deepcopy
- 用Pytorch搭建第一个神经网络且进行优化
猜你喜欢

为什么SELECT * 会导致查询效率低?

Postman interface test

基于宽表的数据建模

SQL optimization experience: from 30248 seconds to 0.001 seconds

Installation of containerd1.5.5

STL - inverter

Using transform:scale causes the page mouse hover event to disappear

用Pytorch搭建第一个神经网络且进行优化

How to suppress SiC MOSFET crosstalk?

Error: `brew cask` is no longer a `brew` command. Use `brew <command> --cask` instead.
随机推荐
High rise building fire prevention
APICloud携手三六零天御,助力企业守好App安全“第一关”
DEJA_ Vu3d - 051 of cesium function set - perfect realization of terrain excavation
Quelle est la largeur de bande du serveur de bavardage sonore pour des centaines de millions de personnes en même temps?
用Pytorch搭建第一個神經網絡且進行優化
How do individuals open accounts to speculate in stocks? Is online account opening safe?
罗氏线圈工作原理
SQL 优化经历:从 30248秒到 0.001秒的经历
It only takes two steps to find the right PMP organization, one check and two questions
Common faults and solutions of Substation
实现全局双指长按返回桌面
Container adapter - stack: stack queue: queue priority_ Queue: priority queue
Data modeling based on wide table
MySQL8.0 忘记 root 密码
Where is CentOS mysql5.5 configuration file
从知识到智慧:知识图谱还要走多远?
Batch modify tables and sorting rules for fields in tables
The Cassandra cluster reinstalls and starts from the node. An error is reported. There is an existing solution
Deployment of MySQL database in Linux Environment
[introduction to SQL for 10 days] day4 Combined Query & specified selection
