#flink算子的并行度设置方法
并行度(Parallelism)是flink中一个非常重要的概念,它主要是指一个算子可以被分的子任务数,通常越高就意味着算子计算速度越快。
如上图所示,map()算子的并行度为2,window()算子的并行度也为2,也可以说整个数据流的并行度就是2。并行度的设置方式有很多,可以总结为以下四种:
1.在算子操作后设置(优先级最高)
在我们设计一系列算子时,我们可以在算子后调用 setParallelism()方法,它只能决定当前算子的并行度,其他算子不受影响。
stream.map(word ->Tuple2.of(word,1L)).setParallelism(2);
此时map算子的并行度为2,它的并行度不受后三种配置方法的影响。
2.在创建执行环境后设置(优先级仅低于第一种设置方法)
在每次编写flink代码时,都需要先创建执行环境。在创建完执行环境后就可以进行一系列的设置,其中就包括并行度设置,示例代码如下:
StreamExecutionEnvironment env =StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(2);
这种方式是全局并行度设置,一般不是很推荐,原因在于如果直接将所有算子都设置相同的并行度,会导致无法动态扩容,所有设置都硬编码在程序中不是一个好的选择。
3.在提交任务时设置(优先级低于方法1和方法2)
在提交任务时,一般可以设置一些必要的参数,其中-p选项可以设置全局并行度,方法如下:
bin/flink run –p 4 –c com.flink.MyStreamWordCount ./LearnFlink-1.0-SNAPSHOT.jar
这里将全局并行度设置为4,这种方法也可以在Web UI中使用。如下图所示:
4.直接使用集群的默认并行度(优先级最低)
在集群配置文件conf/flink-conf.yaml 中直接更改默认并行度:
parallelism.default: 2
这个设置对于整个集群上提交的所有作业有效,初始值为 1。只有当前三中配置都不存在时,才会采用该配置。如果该配置文件不存在,就会默认将cpu的核心数作为默认并行度。
总结:
四种配置方式优先级如下:
算子操作后设置 > 创建执行环境后设置 > 提交任务时设置 > 使用集群的默认并行度
版权归原作者 时代新人0-0 所有, 如有侵权,请联系我们删除。