写点什么

Spark 任务等待与运行策略

用户头像
小舰
关注
发布于: 2021 年 04 月 19 日

前面我们提到了 Spark 的资源分配策略,资源配置有静态和动态两种模式,不同模式在任务提交后会有不同的内存占用行为,但是由于队列资源是有限的,因此会出现任务因为资源不够导致等待的情况。本节来详细分析一下任务提交后在的等待与运行影响因素。

一、资源分配策略回顾

前面我们讲过,spark 有两种资源分配策略。静态分配策略下,spark 任务提交后,会直接根据配置参数来申请资源,并且一直持有特定的资源直至任务结束。动态分配策略下,spark 任务提交后,会根据资源最小配置来申请资源,申请到后就开始运行,这期间如果还有额外资源并且 spark 任务还需要额外资源,会继续占用额外资源。

二、静态分配下的任务等待与运行根据上述的策略,我们来先分析任务提交后的几种状态:

首先我们规定用 Resource(X)表示 X 的资源总数,例如 Resource(Q)代表队列资源大小;

如上图:

Resource(A)+Resource(B)< Resource(Q)

这种情况下,队列资源充足,那么 A 任务启动,B 任务也可以启动;

如上图:

Resource(A)+Resource(B) > Resource(Q)

这种情况下,队列资源紧张,那么 A 任务启动,B 任务因为得不到需要的资源,因此会 Pending,直到申请到所需的资源大小;

三、动态资源分配下的等待与运行

上述的两种场景不难理解,对于动态资源分配策略下,一个任务会有一个初始的资源配置,我们称之为任务运行最小资源需求,同时我们为了避免任务无休止的吃资源,会设置一个上限。

如上图:

Resource(A)+Resource(B)< Resource(Q)

这种情况下,A 任务启动,B 任务也可以启动,与静态类似;

如上图:

Resource(A)+Min(Resource(B))< Resource(Q)

&& Resource(A)+Resource(B)> Resource(Q)

这中情况下,A 任务启动后,B 任务会达到最小资源需求,因此可以运行。

当 A 任务结束后,B 任务会继续申请资源,如果资源充足会达到最大资源状态。

如上图

Resource(A)+Min(Resource(B)) > Resource(Q)

当 A 任务启动后剩余的资源连 B 最小的资源需求都满足不了时,B 任务会 Pending 等待。

四、小结

根据上述的几种情况,我们在提交任务的时候,如果是动态资源策略(推荐)的情况下,为了避免 spark 任务一直 pending,我们可以将最小资源需求配置的小一点,这样至少可以保证 spark 任务能够尽快的启动起来,如果资源慢慢充裕了任务还可以继续吃资源。

发布于: 2021 年 04 月 19 日阅读数: 10
用户头像

小舰

关注

公众号:DLab数据实验室 2020.11.12 加入

中国人民大学硕士

评论

发布
暂无评论
Spark任务等待与运行策略