Flink在实时流计算上的优异表现,确实是值得称赞的,而这也得益于Flink在内部架构上的精细设计,基于不同层面去进行并行任务的执行。今天的大数据学习分享,我们就主要来讲讲Flink Task并行度的概念。
Flink并行任务的四个层次
Flink中的任务被分为多个并行任务来执行,其中每个并行的实例处理一部分数据。这些并行实例的数量被称为并行度。我们在实际生产环境中可以从四个不同层面设置并行度:
l操作算子层面(Operator Level)
l执行环境层面(Execution Environment Level)
l客户端层面(Client Level)
l系统层面(System Level)
需要注意的优先级:算子层面>环境层面>客户端层面>系统层面。
并行度的两个概念:slot和parallelism
1.slot
是指taskmanager的并发执行能力,在hadoop 1.x版本中也有slot的概念,有兴趣的读者可以了解一下。
每一个taskmanager中的分配3个TaskSlot,3个taskmanager一共有9个TaskSlos
2.parallelism是指taskmanager实际使用的并发能力
运行程序默认的并行度为1,9个TaskSlot只用了1个,有8个空闲。设置合适的并行度才能提高效率。
3.parallelism是可配置、可指定的
①可以通过修改$FLINK_HOME/conf/flink-conf.yaml文件的方式更改并行度
②可以通过设置$FLINK_HOME/bin/flink的-p参数修改并行度
③可以通过设置executionEnvironmentk的方法修改并行度
④可以通过设置flink的编程API修改过并行度
⑤这些并行度设置优先级从低到高排序,排序为api>env>p>file.
⑥设置合适的并行度,能提高运算效率
⑦parallelism不能多与slot个数。
简单来说,slot是静态的概念,是指taskmanager具有的并发执行能力;parallelism是动态的概念,是指程序运行时实际使用的并发能力。
需要设置合适的parallelism能提高运算效率,太多了和太少了都不行;设置parallelism有多中方式,优先级为api>env>p>file。
Flink Task的parallelism
Task的parallelism可以在Flink的不同级别上指定。四种级别是:算子级别、执行环境(ExecutionEnvironment)级别、客户端(命令行)级别、配置文件(flink-conf.yaml)级别
*每个operator、data source或者data sink都可以通过调用setParallelism()方法来指定
*运行环境的默认并发数可以通过调用setParallelism()方法来指定。env.setParallelism(3);运行环境的并发数可以被每个算子确切的并发数配置所覆盖。
*对于CLI客户端,并发参数可以通过-p来指定
*影响所有运行环境的系统级别的默认并发度可以在./conf/flink-conf.yaml的parallelism.defaul项中指定。不建议
当然,你也可以设置最大的并行度
*你可以通过调用setMaxParallelism()方法来设置最大并发度。
Flink如何确定TaskManager个数?
Job的最大并行度除以每个TaskManager分配的任务槽数。
Flink on YARN时,TaskManager的数量就是:max(parallelism)/yarnslots(向上取整)。例如,一个最大并行度为10,每个TaskManager有两个任务槽的作业,就会启动5个TaskManager。
关于大数据学习,Flink Task并行度的概念,以上就为大家做了基本的介绍了。Flink的任务并行度的设置,对于运行效率优化方面,是有着很重要的意义的。成都加米谷大数据,专业
大数据培训机构,大数据开发,数据分析与挖掘,零基础班本月正在招生中,课程大纲及学习视频资料可联系客服获取!