Flink Application Development DataStream API Operators Overview-- Flink应用程序开发DataStream API操作符概览
翻译原文- 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操作符概览的更多相关文章
- aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【基本地图的操作】
为了更简单的演示,我们创建个.NET的ASP.NET MVC4项目 好了,上面都是后话,POI说白了,就是你的用户的数据,很多数据,不过没关系,因为你的数据如果存在百度的LBS云上,那么大数据你就不用 ...
- aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云2/2】
中国的IT 需要无私分享和贡献的人,一起努力 本篇博客来自地址:http://www.cnblogs.com/AaronYang/p/3672898.html,请支持原创,未经允许不许转载 1.新建一 ...
- aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云1/2】
如何让用户点,我们可以获得经纬度,我们就要先了解下它给我们提供的百度地图的事件 主要有两个操作事件的,绑定(addEventListener)和解绑(removeEventListener) 一些事件 ...
- 使用Jax-rs 开发RESTfull API 入门
使用Jax-rs 开发RESTfull API 入门 本文使用 Jersey 2开发RESTfull API.Jersey 2 是 JAX-RS 接口的参考实现 使用到的工具 Eclipse Neon ...
- 【翻译】Flink Table Api & SQL —— Overview
本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/ Flink Table Api & ...
- 第一个flink application
导入maven依赖 需要注意的是,如果使用scala写程序,导入的依赖跟java是不一样的 Maven Dependencies You can add the following dependenc ...
- 《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门
准备工作 1.安装查看 Java 的版本号,推荐使用 Java 8. 安装 Flink 2.在 Mac OS X 上安装 Flink 是非常方便的.推荐通过 homebrew 来安装. brew in ...
- 「Flink」使用Java lambda表达式实现Flink WordCount
本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...
- flink安装及standalone模式启动、idea中项目开发
安装 环境 Ubuntu 18 jdk8 flink-1.8.1 安装步骤 安装jdk(略) 下载flink-1.8.1-bin-scala_2.12.tgz,解压到指定目录 wget http:// ...
- Flink学习之路(一)Flink简介
一.什么是Flink? Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能. 二.Flink特点 1.现有的开源计算方案,会把流处 ...
随机推荐
- mybatis动态标签——choose、when、otherwise
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- Matplotlib 网格线
我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线. grid() 方法语法格式如下: matplotlib.pyplot.grid(b=None, which='major', ...
- js实现大转盘抽奖(vue举例)
在开发项目得时候遇到这样一个需求,在移动端项目有个支付抽奖页面,大概效果图如下: 简单介绍一下需求,点击抽奖按钮转盘转动,转盘里边黄色块块是个整张背景图,里边的商品是从接口获取得,包括奖品名称和图片, ...
- Ubuntu安装系统监视器system-monitor并显示在状态栏(火狐浏览器)
system-monitor 使用过Windows 10的朋友们都知道,Windows 10系统自带了一项功能--任务管理器,我们可以通过它方便地查看当前系统的状态,主要包括CPU,内存,硬盘,GPU ...
- python调用c/c++方法
# python调用c/c++方法:一般先将c++代码转化为C类型dll(推荐使用静态dll,否则容易出现各种链接库问题;记得使用extern "C" _declspec(dlle ...
- ACGAN-pytorch
点击查看代码 import argparse import os import numpy as np import torch import torch.nn as nn import torchv ...
- List<Object>集合获取指定属性最大值的对象
List<Vo> list = dao.selectList();if(CollectionUtils.isNotEmpty(list)) { Optional<Vo> max ...
- SpringCloud之配置中心(config)的使用
配置中心的作用就在于可以在项目启动时加载远程或本地的配置文件,将配置文件集中管理 springboot版本: 2.1.6.RELEASE springcloud版本: Finchley.RELEASE ...
- 开启MySQL数据库远程连接
为了使其余用户/计算机能访问SQL数据库,需对SQL Server进行以下配置.有以下两种方法: 方法一:bat命令修改. 新建.txt文件,添加以下内容,保存后再修改为.bat,双击.bat文件. ...
- 图片上传插件WebUploader的坑
需要上传图片的一个操作选择了WebUploader这个插件来实现,具体的实现过程如下. js代码: 1.引入js.css文件: <script type="text/javascrip ...