是否有一种方法可以确定从执行计划或以其他方式运行作业所需的任务槽总数,而不必首先实际启动作业。
根据这份文件:https://ci.apache.org/projects/flink/flink-docs-stable/concepts/runtime.html
flink集群需要的任务槽与作业中使用的最高并行度完全相同。不需要计算一个程序总共包含多少任务(具有不同的并行性)。”
如果我从streamexecutionenvironment获取执行计划(在安装之后,但没有实际执行作业),并从执行计划json中的节点列表中获取任何节点的最大并行度,这是否足以确定运行作业所需的任务槽数。
有没有什么情况不再是这种情况?还有什么需要注意的吗?
1条答案
按热度按时间yb3bgrhw1#
在一般情况下,可以按以下方式计算给定flink作业所需的插槽数:对于每个插槽共享组
g
(表示可以部署到同一插槽中的一组运算符),需要找到具有最大并行性的运算符p_max_g
. 现在需要为作业中的每个槽共享组添加这些数字slots = sum_(g in G) p_max_g
以获得所需插槽的数量。在大多数情况下(如果用户没有设置任何插槽共享组),那么应该只存在一个插槽共享组
G = {g}
. 这意味着flink可以将每个操作符的一个子任务部署到同一个插槽中。一种特殊情况是批处理作业(有界流),如果它们使用阻塞数据交换。在这种情况下,可以依次运行不同的时隙共享组(假定它们与阻塞数据交换/操作员边缘对齐)。
不幸的是,
ExecutionEnvironment.getExecutionPlan
不打印操作员的插槽共享组。因此,仅当存在单个时隙共享组时,基于严格化的执行计划计算所需的时隙数才有效。