【问题标题】:Is there a way to determine total job parallelism or number of slots required to run a Flink job(before it is run)有没有办法确定运行 Flink 作业所需的总作业并行度或插槽数(在运行之前)
【发布时间】:2019-09-11 01:30:11
【问题描述】:

有没有一种方法可以确定从执行计划或以其他方式运行作业所需的任务槽总数,而不必先实际启动作业。

根据此文档:https://ci.apache.org/projects/flink/flink-docs-stable/concepts/runtime.html

“一个 Flink 集群需要与作业中使用的最高并行度完全相同的任务槽。无需计算程序总共包含多少任务(具有不同的并行度)。”

如果我从 StreamExecutionEnvironment 获得执行计划(在设置之后但没有实际执行作业)并从执行计划 json 中的节点列表中获得任何节点的最大并行度,这是否足以确定任务的数量运行作业所需的插槽。

是否有任何情况不再是这种情况?或者有什么需要注意的地方?

【问题讨论】:

    标签: apache-flink flink-streaming flink-cep flink-sql


    【解决方案1】:

    在一般情况下,可以通过以下方式计算给定 Flink 作业所需的插槽数:对于每个 slot sharing group g(表示可以部署到同一插槽中的一组算子),一个需要找到最大并行度的算子p_max_g。现在需要为作业slots = sum_(g in G) p_max_g 中的每个插槽共享组添加这些数字,以获得所需的插槽数。

    在大多数情况下(如果用户没有设置任何槽共享组),那么应该只存在一个槽共享组G = {g}。这意味着 Flink 可以将每个算子的一个子任务部署到同一个 slot 中。

    一个特殊情况是批处理作业(有界流),如果它们使用阻塞数据交换。在这种情况下,可以一个接一个地依次运行不同的时隙共享组(假设它们与阻塞的数据交换/运营商边缘对齐)。

    很遗憾,ExecutionEnvironment.getExecutionPlan 不打印操作员的插槽共享组。因此,基于字符串化的执行计划计算所需的槽数只有在存在单个槽共享组的情况下才有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多