2021年大数据Flink(四十三):扩展阅读 关于并行度

举报
Lansonli 发表于 2021/09/28 00:09:25 2021/09/28
【摘要】 目录 ​​​​​​扩展阅读  关于并行度 详细讲解 关联总结 总结 在Flink中可以如何设置分区数/并行度? 什么时候调整并行度? ​​​​​​扩展阅读  关于并行度 一个Flink程序由多个Operator组成(source、transformation和 sink)。 &...

目录

​​​​​​扩展阅读  关于并行度

详细讲解

关联总结

总结

在Flink中可以如何设置分区数/并行度?

什么时候调整并行度?


​​​​​​扩展阅读  关于并行度

一个Flink程序由多个Operator组成(source、transformation和 sink)。

 一个Operator由多个并行的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参数指定并行度

./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是动态的概念,是指程序运行时实际使用的并发能力

 

关联总结

  • HDFS:文件分块:目的是为了并行读写,提高读写效率,便于存储,容错(针对块做副本,便于恢复)

  • MR:数据切片,目的是为了并行计算

  • Hive:分区(分文件夹)和分桶(文件夹下分文件),如按照日期分区,按照小时分桶, 目的就是为了提高查询效率(读写效率)

  • HBase:分Region,就是按照rowkey的范围进行分区,目的也是为了提高读写效率

  • Kafka:分区Partition,目的为了提高读写效率

  • Spark:分区,目的是为了并行计算

  • Flink:分区/并行度, 目的是为了并行计算

 

总结

以后凡是遇到分区/分片/分桶/分Segment/分Region/分Shard...都是为了提高效率==

 

在Flink中可以如何设置分区数/并行度?

算子operator.setParallelism(2);

env.setParallelism(2);

提交任务时的客户端./bin/flink run -p 2 WordCount-java.jar .......

配置文件中flink-conf.yaml: parallelism.default: 2

算子级别 > env级别 > Client级别 > 配置文件级别 (越靠前具体的代码并行度的优先级越高)

 

什么时候调整并行度?

source:一般和kafka的分区数保持一致
transformation:如果处理逻辑复杂,耗时长,那么调大并行度, 如果数据过滤后变少了,处理简单,可以调小并行度
sink:一般和kafka的分区数保持一致,如果sink到其他地方,灵活处理(如到HDFS为了避免大量小文件可以调小并行度)
注意: 设置的并行度和实际执行时的并行度并不会始终一致

文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。

原文链接:lansonli.blog.csdn.net/article/details/116561982

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。