Apache flink ApacheFlink:setParallelism()和setMaxParallelism()的区别是什么
我尝试使用Apache flink ApacheFlink:setParallelism()和setMaxParallelism()的区别是什么,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我尝试使用ExecutionConfig.setMaxParallelism()方法设置Flink作业的最大并行度,但似乎不起作用 我还修改了标准WordCount示例以运行一些测试,而且setMaxParallelism()方法似乎对本地环境或独立集群都没有任何影响 setMaxParallelism()如何工作?Flink提供了两种设置: setParallelism(x)将作业或操作员的并行度设置为x,即操作员的并行任务数 setMaxParallelism(y)控制键控状态可分配到的最
ExecutionConfig.setMaxParallelism()
方法设置Flink作业的最大并行度,但似乎不起作用
我还修改了标准WordCount示例以运行一些测试,而且setMaxParallelism()
方法似乎对本地环境或独立集群都没有任何影响
setMaxParallelism()
如何工作?Flink提供了两种设置:
将作业或操作员的并行度设置为setParallelism(x)
,即操作员的并行任务数李>x
控制键控状态可分配到的最大任务数,即运算符的最大有效并行度。操作员仍可以有更多任务,但其中只有setMaxParallelism(y)
将分配键控状态并可用于处理。分发密钥状态的单元称为密钥组李>y
本文将更详细地解释这些概念 我今天又运行了一些测试,使用流而不是数据集。这次我看到了setMaxParallelism()的效果
publicstaticvoidmain(字符串[]args)引发异常
{
StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();
env.getConfig().setMaxParallelism(4);//您希望从setMaxParallelism()
中得到什么行为?您可能会将其与setParallelsim()
混淆吗?如果没有setMaxParallelism行,我在执行过程中看到parallelism=8,这就是env的配置方式。使用setMaxParallelism行(4),我希望在执行过程中看到parallelism=4。这是正确的吗?我还在一个具有16个内核的本地环境上进行了测试,日志文件显示了1/16任务等,有或没有setMaxParallelism行。我正在尝试为其他一些作业设置最大平行度的上限,这是正确的理解吗?另一方面,setParallelism是tested按预期工作,但这不是我们要做的。感谢Fabian的解释。因此,在后台,“最大并行度”限制了所涉及的最大键组数。是不是因为我运行的第一个测试没有使用KeyedStream(使用数据集),因此setMaxParallelism没有任何效果?setMaxParallelism()
不影响任务的数量。它只是限制关键组的数量。因为任务比关键组多没有意义,Flink抛出了你在答案中发布的异常。@FabianHueske顺便问一下setParallelism()之间的区别是什么
应用于StreamExecutionEnvironment
并单独应用于StreamOperator
s?假设我已经应用了env.setParallelism(10)
,但对源和操作符使用了setParallelism(1)
public static void main(String[] args) throws Exception
{
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.getConfig().setMaxParallelism(4); // <-- effect
DataStream<String> text = env.fromElements(WORDS);
DataStream<Tuple2<String, Integer>> counts = text.flatMap(new Tokenizer()).keyBy(0).sum(1);
counts.writeAsCsv("test.dat");
env.execute("WordCount Example");
}
Caused by: org.apache.flink.runtime.JobException: Vertex Flat Map's parallelism (8) is higher than the max parallelism (4). Please lower the parallelism or increase the max parallelism.
at org.apache.flink.runtime.executiongraph.ExecutionJobVertex.<init>(ExecutionJobVertex.java:188)
at org.apache.flink.runtime.executiongraph.ExecutionGraph.attachJobGraph(ExecutionGraph.java:830)
at org.apache.flink.runtime.executiongraph.ExecutionGraphBuilder.buildGraph(ExecutionGraphBuilder.java:232)
at org.apache.flink.runtime.executiongraph.ExecutionGraphBuilder.buildGraph(ExecutionGraphBuilder.java:100)
at org.apache.flink.runtime.jobmaster.JobMaster.createExecutionGraph(JobMaster.java:1152)
at org.apache.flink.runtime.jobmaster.JobMaster.createAndRestoreExecutionGraph(JobMaster.java:1132)
at org.apache.flink.runtime.jobmaster.JobMaster.<init>(JobMaster.java:294)
at org.apache.flink.runtime.jobmaster.JobManagerRunner.<init>(JobManagerRunner.java:157)
... 10 more