返回介绍

工作和调度

发布于 2025-05-02 18:19:21 字数 4417 浏览 0 评论 0 收藏

本文档简要介绍了 Flink 如何调度作业及其如何表示和跟踪 JobManager 上的作业状态。

调度

Flink 中的执行资源通过 任务槽 定义。每个 TaskManager 都有一个或多个任务槽,每个槽都可以运行一个并行任务管道。流水线由多个连续的任务,如在 第 n 一 MapFunction 的连同并行实例 第 n 一 ReduceFunction 的并行实例。请注意,Flink 经常同时执行连续任务:对于流程序,无论如何都会发生,但对于批处理程序,它经常发生。

下图说明了这一点。考虑一个带有数据源, MapFunction 和 ReduceFunction 的程序 。源和 MapFunction 以 4 的并行度执行,而 ReduceFunction 以 3 的并行度执行。管道由序列 Source - Map - Reduce 组成。在具有 2 个 TaskManagers 且每个具有 3 个插槽的群集上,程序将按如下所述执行。

将任务管道分配给插槽

在内部,Flink 限定通过 SlotSharingGroupCoLocationGroup 哪些任务可以共享的狭槽(许可),分别哪些任务必须严格放置到相同的时隙。

JobManager 数据结构

在作业执行期间,JobManager 会跟踪分布式任务,决定何时安排下一个任务(或一组任务),并对已完成的任务或执行失败做出反应。

JobManager 接收 JobGraph ,它是由 算子( JobVertex )和中间结果( IntermediateDataSet )组成的数据流的表示。每个 算子都具有属性,例如并行性和它执行的代码。此外,JobGraph 还有一组附加库,这些库是执行算子代码所必需的。

JobManager 将 JobGraph 转换为 ExecutionGraph 。ExecutionGraph 是 JobGraph 的并行版本:对于每个 JobVertex,它包含每个并行子任务的 ExecutionVertex 。并行度为 100 的 算子将具有一个 JobVertex 和 100 个 ExecutionVertices。ExecutionVertex 跟踪特定子任务的执行状态。来自一个 JobVertex 所有 ExecutionVertices 都保存在 ExecutionJobVertex 中 ,它跟踪整个算子的状态。除了顶点之外,ExecutionGraph 还包含 IntermediateResultIntermediateResultPartition 。前者跟踪 IntermediateDataSet 的状态,后者是每个分区的状态。

JobGraph 和 ExecutionGraph

每个 ExecutionGraph 都有一个与之关联的作业状态。此作业状态指示作业执行的当前状态。

Flink 作业首先处于 创建 状态,然后切换到 运行, 并在完成所有工作后切换到已 完成 。如果出现故障,作业将首先切换为取消所有正在运行的任务的 失败 。如果所有作业顶点都已达到最终状态且作业无法重新启动,则作业将转换为 失败 。如果可以重新启动作业,则它将进入 重新启动 状态。作业完全重新启动后,将达到 创建 状态。

如果用户取消作业,它将进入 取消 状态。这还需要取消所有当前正在运行的任务。一旦所有正在运行的任务都达到最终状态,作业将转换为 已取消 的状态。

与 完成 , 取消 和 失败 的状态不同,它表示全局终端状态,因此触发清理作业, 暂停 状态仅在本地终端。本地终端意味着作业的执行已在相应的 JobManager 上终止,但 Flink 集群的另一个 JobManager 可以从持久性 HA 存储中检索作业并重新启动它。因此,到达 暂停 状态的作业将不会被完全清除。

Flink 工作的状态和转型

在执行 ExecutionGraph 期间,每个并行任务都经历多个阶段,从 创建 到 完成 或 失败 。下图说明了它们之间的状态和可能的转换。可以多次执行任务(例如,在故障恢复过程中)。因此,在 Execution 中跟踪 ExecutionVertex 执行 。每个 ExecutionVertex 都有一个当前的 Execution 和先前的 Executions。

任务执行的状态和转变

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。