基本转换算子(无状态算子):输入相同的情况下输出一定相同

map:针对流或列表中的每一个元素,输出一个元素

filter:针对流或列表中的每一个元素,输出0个或者1个元素

flatmap:针对流或列表中的每一个元素,输出0个,1个或者多个元素

mapPartition: 对一个分区中的分区进行转换,结果是一个迭代器,转换前后元素个数可能不同

有状态算子:

sum/max/min/maxBy/minBy              通称为滚动聚合算子(rolling aggregation)

reduce(归并): reduce会初始化一个空累加器(类型和流中的元素类型相同,第一条元素到来直接作为累加器保存,并将累加器输出。第二条以及之后到来的元素,和累加器进行累加操作并更新累加器,然后将累加器输出。reduce函数定义的是输入元素和累加器的累加规则。每个key都会维护自己的累加器,输入数据更新完累加器后直接被丢弃,滚动聚合。

flink 每个算子一个线程 flink常用算子_big data

 

这些算子只能在keyBy之后使用

keyBy算子

flink 每个算子一个线程 flink常用算子_flink_02

DataStream -> KeyedStream :  逻辑的将一个流拆分成不相交的分区,每个分区包含具有相同key的元素,在内部以hash的形式实现的。

flink 每个算子一个线程 flink常用算子_并行任务_03

flink 每个算子一个线程 flink常用算子_big data_04

 

 

 

 

reduceGroup:  将一个dataset或者一个group聚合成一个或多个元素。reduceGroup是reduce的一种优化方案;它会先分组reduce,然后在做整体的reduce;这样做的好处就是可以减少网络IO

Aggregate: 在数据集上进行聚合求最值,aggregate只能作用于元组上。要使用aggregate,只能使用字段索引名或索引名称来进行分组groupBy(0),否则报错。

distinct:    去重重复数据

first:   去前n个数

join: 将两个DataSet按照一定条件连接到一起,形成新的DataSet

leftOuterJoin: 左外连接,左边的Dataset中的每一个元素,去连接右边的元素

算子的泛化:

flatmap  ->  map/filter

reduce   ->  sum/min/max/minBy/maxBy

keyedProcessFunction ->  flatmap/reduce

箭头左边的算子可以实现箭头右边的算子

物理分区算子:

broadcast()     //将每条数据广播到下游算子的每个分区中
rebalance()     // 使用Round-Robin负载均衡算法将输入流平均分配到随后的并行任务中去。可以解决数据倾斜问题。
rescale()        //使用的也是Round-Robin负载均衡算法,但只会将数据发送到接下来并行任务的部分任务上。
shuffle()     //shuffle方法将数据随机的分配到下游算子的并行任务中去。
global()   // 将所有的输入流数据都发送到下游算子的第一个并行任务中去。
custom()   //  使用partitionCustom()来自定义分区策略,这个方法接收一个Partitioner对象,这个对象需要实现两个方法  分区逻辑(partition方法)和针对流的哪一个字段或者key进行分区(getKey方法)

多流转换算子(操作多条流):

Split   Select  两个算子配合使用,调完split后调用select

flink 每个算子一个线程 flink常用算子_大数据_05

 

flink 每个算子一个线程 flink常用算子_并行任务_06

 

Connect   CoMap

flink 每个算子一个线程 flink常用算子_flink 每个算子一个线程_07

flink 每个算子一个线程 flink常用算子_flink_08

 

flink 每个算子一个线程 flink常用算子_flink 每个算子一个线程_09

Union   可以合并多条流,条件是每条流数据类型必须相同

flink 每个算子一个线程 flink常用算子_并行任务_10

 DataStream 只能做一些简单的转换操作,如map,filter,flatmap

使用keyBy算子将DataStream转换为KeyedStream后,可以使用滚动聚合算子做一些聚合操作,如

sum,min,max,minBy,maxBy, reduce等。

做完聚合操作KeyedStream有转换为  SingleOutputStreamOperator(继承自DataStream)

flink 每个算子一个线程 flink常用算子_big data_11