当前位置: 首页 > 知识库问答 >
问题:

Apache Flink:setParallelism()和setMaxParallelism()的区别是什么

王辉
2023-03-14

我尝试为Flink作业设置最大并行度,使用ExecutionConfig.setMaxParallelism()方法,但它似乎不起作用。

我还修改了标准WordCount示例以运行一些测试,似乎setMaxParallelism()方法对本地环境或独立集群没有任何影响。

setMaxParallelism()如何工作?

共有2个答案

姚星腾
2023-03-14

今天我又运行了一些测试,使用流而不是数据集。这次我看到了setMaxParallelism()的效果。

    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

谢谢

秦胡媚
2023-03-14

Flink提供两种设置:

  • 将作业或操作员的并行度设置为x,即操作员的并行任务数
  • setMaxParallelism(y)控制键控状态可以分配到的最大任务数,即操作符的最大有效并行度。操作员仍然可以有更多的任务,但其中只有y个任务将分配键控状态并可用于处理。分发密钥状态的单元称为密钥组

留档将更详细地解释这些概念。

 类似资料:
  • 本文向大家介绍#{}和${}的区别是什么?相关面试题,主要包含被问及#{}和${}的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 #{}是预编译处理,${}是字符串替换。 Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值; Mybatis 在处理{}时,就是把${}替换成变量的值。 使用#{}可以有效的防

  • 本文向大家介绍redux和flux的区别是什么?相关面试题,主要包含被问及redux和flux的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 Flux: Store 包含状态和更改逻辑 有多个 Store 所有 Store 都互不影响且是平级的 有单一调度器 React 组件订阅 store 状态是可变的 Redux: Store 和更改逻辑是分开的 只有一个 Store 带有分层 re

  • 本文向大家介绍useState和this.state的区别是什么?相关面试题,主要包含被问及useState和this.state的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 内部基于 实现,方法返回 state 本身以及一个修改 state 的方法。 通过 修改数据,不会和 一样进行对象属性合并,会直接覆盖。 Hooks 函数组件中,存在的概念,在一次渲染闭包中,state 是固定不

  • 本文向大家介绍pjax和ajax的区别是什么?相关面试题,主要包含被问及pjax和ajax的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 pjax 是一个 jQuery 插件,它通过 ajax 和 pushState 技术提供了极速的(无刷新 ajax 加载)浏览体验,并且保持了真实的地址、网页标题,浏览器的后退(前进)按钮也可以正常使用。 pjax 的工作原理是通过 ajax 从服务器

  • 1、float 和 double 的区别是什么? (1)内存中占有的字节数不同 单精度浮点数在内存中占有4个字节; 双精度浮点数在内存中占有8个字节; (2)有效数字位数不同 单精度浮点数有效数字8位; 双精度浮点数有效数字16位; (3)数值取值范围不同 单精度浮点数的表示范围:-3.40E+38~3.40E+38 双精度浮点数的表示范围:-1.79E+308~-1.79E+308 (4)在程序

  • char的长度是固定的,varchar的长度的可变的; char的效率比varchar的效率高; char占用空间比varchar大,char在查询时需要使用trim;