Apache Flink——DataStream算子汇总

2022-07-10  本文已影响0人  小波同学

Transformation 数据流转换算子

Map

FlatMap

Filter

KeyBy

在以下情况下,类型不能为键:是POJO类型,但不覆盖hashCode()方法,而是依赖于Object.hashCode()实现。它是任何类型的数组。

Reduce

Aggregations聚合

Window

WindowAll

Window Apply 窗口应用

Window Reduce 窗口缩小

Aggregations on windows

Union 联合数据流

DataStream<String> mapStream9000=textStream9000.map(s->"来自9000端口:"+s);

DataStream<String> mapStream9001=textStream9001.map(s->"来自9001端口:"+s);

DataStream<String> mapStream9002=textStream9002.map(s->"来自9002端口:"+s);

//union用来合并两个或者多个流的数据,统一到一个流中
DataStream<String> result =  mapStream9000.union(mapStream9001,mapStream9002);

Window Join 窗口联接

Interval Join 间隔加入

Window CoGroup

Connect 连接

CoMap, CoFlatMap

Iterate 迭代数据流

project(2,0)

DataStream<Tuple3<Integer, Double, String>> in = // [...]

DataStream<Tuple2<String, Integer>> out = in.project(2,0);

物理分区

partitionCustom 自定义分区

dataStream.partitionCustom(partitioner, "someKey");

dataStream.partitionCustom(partitioner, 0);

shuffle() 随机分区

dataStream.shuffle();

rebalance() 重新平衡(轮询分区)

dataStream.rebalance();

Flink也有数据倾斜的时候,比如当前有数据量大概10亿条数据需要处理,在处理过程中可能会发生如图所示的状况:


这个时候本来总体数据量只需要10分钟解决的问题,出现了数据倾斜,机器1上的任务需要4个小时才能完成,那么其他3台机器执行完毕也要等待机器1执行完毕后才算整体将任务完成;所以在实际的工作中,出现这种情况比较好的解决方案就是接下来要介绍的—rebalance(内部使用round robin方法将数据均匀打散。这对于数据倾斜时是很好的选择。)

rescale() 重新缩放

dataStream.rescale();

broadcast() 广播数据流

dataStream.broadcast();

算子链和资源组

startNewChain() 开始新链接

someStream.filter(...).map(...).startNewChain().map(...);

disableChaining() 禁用链接

someStream.map(...).disableChaining();

slotSharingGroup("name") 设置广告位共享组

someStream.filter(...).slotSharingGroup("name");

参考:
https://blog.csdn.net/qq_34387470/article/details/115389804

https://blog.51cto.com/u_15127536/2658929

https://blog.csdn.net/zhanglong_4444/article/details/114000627

上一篇下一篇

猜你喜欢

热点阅读