从0到1Flink的成长之路(二十)-扩展:并行度(Parallelism)
Posted 熊老二-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从0到1Flink的成长之路(二十)-扩展:并行度(Parallelism)相关的知识,希望对你有一定的参考价值。
扩展:并行度(Parallelism)
的Task(线程)来执行, 一个Operator的并行Task(线程)数目就被称为该Operator(任务)的并行度(Parallel)。
并行度可以有如下几种指定方式
1.Operator Level(算子级别)(可以使用)
一个算子、数据源和sink的并行度可以通过调用 setParallelism()方法来指定
2.Execution Environment Level(Env级别)(可以使用)
执行环境(任务)的默认并行度可以通过调用setParallelism()方法指定。为了以并行度3来执行所有的算子、数据源和data sink, 可以通过如下的方式设置执行环境的并行度:
执行环境的并行度可以通过显式设置算子的并行度而被重写
3.Client Level(客户端级别,推荐使用)(可以使用)
并行度可以在客户端将job提交到Flink时设定
对于CLI客户端,可以通过-p参数指定并行度
/export/server/flink/bin/flink run -p 10 WordCount-java.jar
4.System Level(系统默认级别,尽量不使用)
在系统级可以通过设置flink-conf.yaml文件中的parallelism.default属性来指定所有执行环境的默认并行度
示例
Example1:在fink-conf.yaml中 taskmanager.numberOfTaskSlots 默认值为1,即每个Task
Manager上只有一个Slot ,此处是3。Example1中,WordCount程序设置了并行度为1,意味着程序 Source、Reduce、Sink在一个Slot中,占用一个Slot
Example2:通过设置并行度为2后,将占用2个Slot
Example3:通过设置并行度为9,将占用9个Slot
Example4:通过设置并行度为9,并且设置sink的并行度为1,则Source、Reduce将占用9个Slot,但是Sink只占用1个Slot
注意
1.并行度的优先级:算子级别 > env级别 > Client级别 > 系统默认级别 (越靠前具体的代码并
行度的优先级越高) 2.如果source不可以被并行执行,即使指定了并行度为多个,也不会生效
3.实际生产中,我们推荐在算子级别显示指定各自的并行度,方便进行显示和精确的资源控制。
4.slot是静态的概念,是指taskmanager具有的并发执行能力; parallelism是动态的概念,是指程序
运行时实际使用的并发能力
以上是关于从0到1Flink的成长之路(二十)-扩展:并行度(Parallelism)的主要内容,如果未能解决你的问题,请参考以下文章
从0到1Flink的成长之路(二十)-Flink 高级特性之扩展:End-to-End Exactly-Once