并行执行

本节介绍如何在Flink中配置程序的并行执行。FLink程序由多个任务(转换/操作符、数据源和sinks)组成。任务被分成多个并行实例来执行,每个并行实例处理任务的输入数据的子集。任务的并行实例的数量称之为并行性。

如果要使用保存点,还应该考虑设置最大并行性(或最大并行性)。当从保存点还原时,可以改变特定运算符或整个程序的并行性,并且该设置指定并行性的上限。这是必需的,因为FLINK内部将状态划分为key-groups,并且我们不能拥有+INF的key-group数,因为这将对性能有害。

Flink中人物的并行度可以从多个不同层面设置:

操作算子层

操作算子,数据源,数据接收器等这些并行度都可以通过调用他们的setParallelism()方法设置。例如:

val env = StreamExecutionEnvironment.getExecutionEnvironment

val text = [...]

val wordCounts = text

? ?.flatMap{ _.split(" ") map { (_, 1) } }

? ?.keyBy(0)

? ?.timeWindow(Time.seconds(5))

? ?.sum(1).setParallelism(5)

wordCounts.print()

env.execute("Word Count Example")

执行环境层面

flink程序执行需要执行环境上下文。执行环境为其要执行的操作算子,数据源,数据sinks都是设置了默认的并行度。执行环境的并行度可以通过操作算子显示指定并行度来覆盖掉。

默认的执行环境并行度可以通过调用setParallelism()来设置。例如,操作算子,数据源,数据接收器,并行度都设置为3,那么在执行环境层面,设置方式如下:

客户端层

在提交job 到flink的时候,在客户端侧也可以设置flink的并行度。客户端即可以是java工程,也可以是scala工程。Flink的Command-line Interface (CLI)就是这样一种客户端。

在客户端侧flink可以通过-p参数来设置并行度。例如:

https://blog.csdn.net/rlnLo2pNEfx9c/article/details/bin/flink run -p 10 https://blog.csdn.net/rlnLo2pNEfx9c/article/examples/*WordCount-java*.jar

在java/scala客户端,并行度设置方式如下:

系统层面

系统层面的并行度设置,会针对所有的执行环境生效,可以通过parallelism.default,属性在conf/flink-conf.yaml文件中设置。

设置最大并行度

设置最大并行度,实际上调用的方法是setMaxParallelism(),其调用位置和setParallelism()一样。

默认的最大并行度是近似于operatorParallelism + (operatorParallelism / 2),下限是127,上线是32768.

值得注意的是将最大的并行的设置为超级大的数可能会对性能造成不利的影响,雅思6.5因为一些状态后端是必须要保存内部数据结构的,这个数据结构跟key-group数量相匹配(这是可重定状态的内部实现机制)。

配置taskmanagerslot

flink通过将项目分成tasks,来实现并行的执行项目,划分的tasks会被发到slot去处理。

集群中Flink的taskmanager提供处理slot。Slots数量最合适的是跟taskmanager的cores数量成正比。当然,taskmanager.numberOfTaskSlots的推荐值就是cpu核心的数目。

当启动一个任务的时候,我们可以为其提供默认的slot数目,其实也即是flink工程的并行度,设置方式在上面已经有详细介绍。

推荐阅读

Flink:动态表上的连续查询


文章来源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/80809738

Flink并行度的更多相关文章

  1. Flink知识点

    1. Flink.Storm.Sparkstreaming对比 Storm只支持流处理任务,数据是一条一条的源源不断地处理,而MapReduce.spark只支持批处理任务,spark-streami ...

  2. Flink与Spark Streaming在与kafka结合的区别!

    本文主要是想聊聊flink与kafka结合.当然,单纯的介绍flink与kafka的结合呢,比较单调,也没有可对比性,所以的准备顺便帮大家简单回顾一下Spark Streaming与kafka的结合. ...

  3. 入门大数据---Flink学习总括

    第一节 初识 Flink 在数据激增的时代,催生出了一批计算框架.最早期比较流行的有MapReduce,然后有Spark,直到现在越来越多的公司采用Flink处理.Flink相对前两个框架真正做到了高 ...

  4. [源码解析] 当 Java Stream 遇见 Flink

    [源码解析] 当 Java Stream 遇见 Flink 目录 [源码解析] 当 Java Stream 遇见 Flink 0x00 摘要 0x01 领域 1.1 Flink 1.2 Java St ...

  5. flink solt,并行度

    转自:https://www.jianshu.com/p/3598f23031e6 简介 Flink运行时主要角色有两个:JobManager和TaskManager,无论是standalone集群, ...

  6. Flink Task 并行度

    并行的数据流 Flink程序由多个任务(转换/运算符,数据源和接收器)组成,Flink中的程序本质上是并行和分布式的. 在执行期间,流具有一个或多个流分区,并且每个operator具有一个或多个ope ...

  7. Flink Program Guide (10) -- Savepoints (DataStream API编程指导 -- For Java)

    Savepoint 本文翻译自文档Streaming Guide / Savepoints ------------------------------------------------------ ...

  8. Flink Program Guide (2) -- 综述 (DataStream API编程指导 -- For Java)

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  9. Flink Program Guide (1) -- 基本API概念(Basic API Concepts -- For Java)

    false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...

随机推荐

  1. NO20文件属性--inode--block-企业场景题

    壹  Linux文件属性描述:在Linux里一切皆文件Linux系统中的文件或目录的属性主要包括:索引节点(inode).文件类型.权限属性.链接数.所归属的用户和用户组.最近修改时间等内容. 例子: ...

  2. 序列化sys随笔补充

    sys是在和python解释器做交互 sys.path----模块查找的顺序 sys.path.append() sys.path.insert()sys.argv---只能在终端执行 sys.arg ...

  3. android的文件操作

    http://blog.csdn.net/fenghome/article/details/5668598 android的文件操作要有权限: <uses-permission android: ...

  4. 005-PHP函数输出一行内容

    <?php function printBold($inputText) //定义function printBold() { print("<B>" . $in ...

  5. 《新标准C++程序设计》4.6(C++学习笔记16)

    重载流插入运算符和流提取运算符 流插入运算符:“<<” 流提取运算符:“>>” cout 是在 iostream 中定义的,ostream 类的对象. “<<” 能 ...

  6. 10 Class文件结构

  7. oracle通用帮助类

    需要的dll( EntityFramework.6.0.0Oracle.ManagedDataAccess.12.1.2400System.Configuration.dllEmitMapper.1. ...

  8. 关于无法下载sklearn中的MNIST original数据集的问题

    在使用Sklearn进行加载自带的数据集MNIST时,总是报错,代码及相应的错误显示如下: from sklearn.datasets import fetch_mldata mnist = fetc ...

  9. 适配器之SimpleAdapter

    前言: 在写适配器时,SimpleAdapter会经常使用到,虽然他比ArrayAdapter复杂,但是也提供了更多的功能 正文: 我们接下来先从SimpleAdapter中较为简单的显示两行文本开始 ...

  10. python 小数相加报错 invalid literal for int() with base 10

    for i in column1: x = int(i) s += xprint "sum:",s,"count:",len(column1)# round ( ...