Flink中任务、作业和子任务之间的区别

9

我是新手,正在学习 flink,想要了解:

  1. 作业
  2. 任务
  3. 子任务

我在文档中进行了搜索,但仍然不清楚它们之间的主要区别。

1个回答

22

这里解释了任务和子任务 -- https://ci.apache.org/projects/flink/flink-docs-release-1.7/concepts/runtime.html#tasks-and-operator-chains:

enter image description here

一个任务是一个抽象,代表着一系列可以在单个线程中执行的操作器链。例如keyBy(通过某个键对流进行网络分区)或管道并行度的更改都会打破链接并强制操作器进入单独的任务。在上图中,应用程序有三个任务。
子任务是任务的一个并行切片。这是可调度、可运行的执行单元。在上面的图中,应用程序将以源/映射和keyBy/窗口/应用任务的并行度为2运行,并以汇聚的并行度为1运行,从而总共产生5个子任务。
作业是应用程序的运行实例。客户端将作业提交给作业管理器,它将它们切成子任务,并安排这些子任务由任务管理器执行。
更新:
社区决定重新对齐任务和子任务的定义,以匹配这些术语在代码中的使用方式--这意味着任务和子任务现在意味着同样的事情:一个操作器或操作器链的正好一个并行实例。有关详细信息,请参见词汇表

1
嗨@david-anderson,看起来Flink中的Task相当于Spark中的TaskSet或Stage,而SubTask相当于Spark中的Task? - Tom
请参见 https://dev59.com/9rDla4cB1Zd3GeqP2Q-D - David Anderson
6
任务和子任务在概念和代码实现方面都设计得最糟糕。子任务是由线程运行的最小工作单位,但在Flink源代码中,没有名为Subtask或类似名称的类。更奇怪的是,有一个名为Task的实现了Runable接口的类,这意味着Task是将在线程中运行的单位,这与上面展示的图片完全不同。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接