翻译原文- Application Development DataStream API Operators

概览

操作符将一个或多个DataStream转换为新的DataStream。程序可以将多种转换组合成复杂的数据流拓扑。

本节对基本转换,应用这些转换后的有效物理分区进行描述以及对Flink操作符链的见解。

DataStream转换

原文DataStream Transformations。

Java代码

转换 描述
Map
DataStream → DataStream
取一个元素并产生一个元素。一个映射函数的例子,将输入流的值加倍:
FlatMap
DataStream → DataStream
取一个元素并产生零个,一个或多个元素。flatmap函数可将句子拆分为单词:。
Filter
DataStream → DataStream
为每个元素执行一个布尔函数,函数返回true时保留元素。过滤出零值的filter例子:
KeyBy
DataStream → KeyedStream
从逻辑上将流划分为不相交的分区。所有具有相同键的记录都分配给相同的分区。在内部,keyBy()是通过哈希分区实现的。有多种指定keys的方法。
此转换返回一个KeyedStream,除其他事项外,还需要使用keyed state

注意:在以下情况下,类型不能为键:
1. 类型是POJO类型,但不覆盖hashCode()方法,而是依赖于Object.hashCode()的默认实现。
2. 它是任何类型的数组。
Reduce
KeyedStream → DataStream
在keyed数据流上进行“滚动” reduce。将当前元素与最后一个reduce的value合并,并发出新值。
一个创建局部求和流的reduce函数例子:
Aggregations
KeyedStream → DataStream
在一个keyed数据流上滚动聚合。min和minBy之间的区别在于min返回最小值,而minBy返回在此字段中具有最小值的元素(max和maxBy相同)。
Window
KeyedStream → WindowedStream
可以在已经分区的KeyedStreams上定义Windows。Windows根据某些特征(例如,最近5秒钟内到达的数据)将每个键中的数据分组。有关Windows的完整说明,请参见Windows
WindowAll
DataStream → AllWindowedStream
Windows可以在常规DataStreams上定义。Windows根据某些特征(例如,最近5秒钟内到达的数据)将所有流事件分组。有关Windows的完整说明,请参见Windows
警告:在许多情况下,这是非并行转换。所有记录将被收集在windowAll操作符的一个任务中。
Window Apply
WindowedStream → DataStream
AllWindowedStream → DataStream
将一般函数应用于整个窗口。以下是一个手动对窗口元素求和的函数。
注意:如果使用windowAll转换,则需要改用AllWindowFunction。
Window Reduce
WindowedStream → DataStream
将reduce函数应用于窗口,并返回reduced后的值。
Aggregations on windows
WindowedStream → DataStream
聚合窗口的内容。min和minBy之间的区别在于min返回最小值,而minBy返回在此字段中具有最小值的元素(与max和maxBy相同)。
Union
DataStream* → DataStream
两个或多个数据流的并集,以创建一个包含所有流中的所有元素的新流。注意:如果将数据流与其自身合并,则在结果流中每个元素将获得两次。
Window Join
DataStream,DataStream → DataStream
在给定键和一个共同窗口上连接两个数据流。
Interval Join
KeyedStream,KeyedStream → DataStream
在给定的时间间隔上,使用一个共同的key将两个keyed流的两个元素e1和e2连接起来,从而使e1.timestamp + lowerBound <= e2.timestamp <= e1.timestamp + upperBound
Window CoGroup
DataStream,DataStream → DataStream
在给定的键和一个共同窗口上将两个数据流组合在一起。
Connect
DataStream,DataStream → ConnectedStreams
“连接”两个保留其类型的数据流。连接允许两个流之间共享状态。
CoMap, CoFlatMap
ConnectedStreams → DataStream
在连接的数据流上的map和flatMap二者是相似的。(译者:ConnectedStreams转换成一个普通流)
Iterate
DataStream → IterativeStream → DataStream
通过将一个操作符的输出重定向到某个先前的操作符,在流中创建“反馈”循环。这对于定义不断更新模型的算法特别有用。以下代码从流开始,并连续应用迭代主体。大于0的元素将被发送回反馈通道,其余元素将被转发到下游。

在元组的数据流上可以进行以下转换:

Java代码

转换 描述
Project
DataStream → DataStream
从元组中选择字段的子集

物理分区

在转换后Flink还通过以下函数在确切的流分区上进行了低级别控制(如果需要)。

Java代码

转换 描述
Custom partitioning
DataStream → DataStream
使用用户定义的分区器为每个元素选择目标任务。
Random partitioning
DataStream → DataStream
根据均匀分布对元素进行随机划分。
Rebalancing (Round-robin partitioning)
DataStream → DataStream
分区元素轮循,从而为每个分区创建相等的负载。在存在数据偏斜的情况下对性能优化很有用。
Rescaling
DataStream → DataStream
将元素轮询地分配到下游操作符的子集。如果您希望拥有pipelines时这很有用,例如,从一个source的每个并行实例散开到几个mappers的子集以分配负载,但又不希望像rebalance()引起全部重新平衡。这仅需要本地数据传输,而不需要通过网络传输数据,这取决于其他配置值,例如TaskManager的slots数。
上游操作发送元素到的下游操作的子集取决于上游操作和下游操作两者的并行度。例如,如果上游操作具有并行度2,而下游操作具有并行度6,则一个上游操作将元素分配给三个下游操作,而另一个上游操作将分配给其他三个下游操作。另一方面,如果上游操作具有并行性6,而下游操作具有并行性2,则3个上游操作将分配给1个下游操作,而另外3个上游操作将分配给其它1个下游操作。
如果不同的并行度不是彼此的倍数,则一个或几个下游操作将具有与上游操作不同的输入数量。
请参见此图,以查看上面示例中的连接模式:

Broadcasting
DataStream → DataStream
将元素广播到每个分区。

任务链和资源组

Java代码

链接两个后续的转换意味着将它们共同定位在同一线程内以获得更好的性能。如果可能的话,默认情况下Flink会链接操作符(例如,两个后续的映射转换)。如果需要,API可以对链接进行细粒度的控制:

如果要在整个作业中禁用链接,请使用StreamExecutionEnvironment.disableOperatorChaining()。为了获得更精细的控制,可以使用以下函数。请注意,这些函数只能在DataStream转换后使用,因为它们引用的到先前的转换。例如,您可以使用someStream.map(...).startNewChain(),但不能使用someStream.startNewChain()。

一个资源组是Flink中的一个slot,请参阅 slots。如果需要,您可以手动将操作符隔离在不同的slots中。

转换 描述
Start new chain 从此操作符开始,开始新的链。下面这两个mappers将被链接,并且filter将不会链接到第一个mapper。
Disable chaining 不链接map操作符
Set slot sharing group 设置操作符的slot共享组。Flink会将具有相同slot共享组的操作放入同一slot,同时将没有slot共享组的操作保留在其他slot中。这可以用来隔离slot。如果所有输入操作都在同一slot共享组中,则slot共享组将从输入操作继承。默认slot共享组的名称为“ default”,可以通过调用slotSharingGroup(“ default”)将操作显式放入该组中。

Flink Application Development DataStream API Operators Overview-- Flink应用程序开发DataStream API操作符概览的更多相关文章

  1. aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【基本地图的操作】

    为了更简单的演示,我们创建个.NET的ASP.NET MVC4项目 好了,上面都是后话,POI说白了,就是你的用户的数据,很多数据,不过没关系,因为你的数据如果存在百度的LBS云上,那么大数据你就不用 ...

  2. aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云2/2】

    中国的IT 需要无私分享和贡献的人,一起努力 本篇博客来自地址:http://www.cnblogs.com/AaronYang/p/3672898.html,请支持原创,未经允许不许转载 1.新建一 ...

  3. aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云1/2】

    如何让用户点,我们可以获得经纬度,我们就要先了解下它给我们提供的百度地图的事件 主要有两个操作事件的,绑定(addEventListener)和解绑(removeEventListener) 一些事件 ...

  4. 使用Jax-rs 开发RESTfull API 入门

    使用Jax-rs 开发RESTfull API 入门 本文使用 Jersey 2开发RESTfull API.Jersey 2 是 JAX-RS 接口的参考实现 使用到的工具 Eclipse Neon ...

  5. 【翻译】Flink Table Api & SQL —— Overview

    本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/ Flink Table Api & ...

  6. 第一个flink application

    导入maven依赖 需要注意的是,如果使用scala写程序,导入的依赖跟java是不一样的 Maven Dependencies You can add the following dependenc ...

  7. 《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门

    准备工作 1.安装查看 Java 的版本号,推荐使用 Java 8. 安装 Flink 2.在 Mac OS X 上安装 Flink 是非常方便的.推荐通过 homebrew 来安装. brew in ...

  8. 「Flink」使用Java lambda表达式实现Flink WordCount

    本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...

  9. flink安装及standalone模式启动、idea中项目开发

    安装 环境 Ubuntu 18 jdk8 flink-1.8.1 安装步骤 安装jdk(略) 下载flink-1.8.1-bin-scala_2.12.tgz,解压到指定目录 wget http:// ...

  10. Flink学习之路(一)Flink简介

    一.什么是Flink? Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能. 二.Flink特点 1.现有的开源计算方案,会把流处 ...

随机推荐

  1. MSF后渗透常用命令

    一.在meterpreter命令行下常用的操作 ps # 查看当前活跃进程 migrate pid # 将Meterpreter会话移植到进程数位pid的进程中 execute -H -i -f cm ...

  2. js通过hook拿fetch返回数据

    前言 很多情况下咱们在做浏览器插件的时候需要拿fetch的返回数据而不影响功能正常操作. 原理 hook原理咱就不讲了,跟其他hook差不多.具体来看看如何实现返回的. 用过fetch的朋友应该都知道 ...

  3. 001.shell-每日练习一文件创建

    001.shell-每日练习一文件创建 0x00.练习要求 在/usr/local/uz654目录下,按照xxxx-xx-xx生成一个文件,如:2023-02-11.log 把磁盘的使用情况写到这个文 ...

  4. Windows 脚本放到 Linux 服务器不生效的问题 /bin/bash^M: bad interpreter: No such file or directory

    在windows编辑shell脚本后,由于文件格式原因,在linux下运行报错 有三个方法 1.在windows下,使用notepad++,将文件格式改为unix就可以了 2.在linux下,使用vi ...

  5. gitlab-runner运行流水线过程中出现报错

    1.提示error: could not lock config file D:\gitlab-runner\builds\fJW28yU8\0\auto_test_10\auto_test_dp20 ...

  6. vim 小记录

    将str1批量替换成str2 , 特殊符号前用转译符 \ :%s/str1/str2/g

  7. if语法案例

    if语法案例 1. 判断系统剩余内存 1) 脚本正文 2) 执行结果 2.监控web和数据库的方法 1) 端口监控 2) 进程监控 3) 客户端模拟 4) 数据库判断* 3.mysql数据库检测命令演 ...

  8. Agilepoint中的JS Method 封装

    /**================================================================================================= ...

  9. LAN8720 调试笔记

    因为项目需要开始研究LAN8720,还没有仔细研究芯片手册就根据网上能找到的原理图画了第一版电路 调试整整花了我2天半,期间多亏硬汉哥的耐心解答.下面是我调试过程中遇到的一些坑   1.TPTX.TO ...

  10. Spring Boot 开启后缀匹配模式

    项目原有 Java 配置为继承 WebMvcConfigurationSupport, 而WebMvcConfigurationSupport#requestMappingHandlerMapping ...