Flink流计算常用算子是什么


这篇文章主要介绍“Flink流计算常用算子是什么”,在日常操作中,相信很多人在Flink流计算常用算子是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flink流计算常用算子是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!Flink和Spark类似,也是一种一站式处理的框架;既可以进行批处理(DataSet),也可以进行实时处理(DataStream)。所以下面将Flink的算子分为两大类:一类是DataSet,一类是DataStream。fromCollection:从本地集合读取数据例:readTextFile:从文件中读取:readTextFile可以对一个文件目录内的所有文件,包括所有子目录中的所有文件的遍历访问方式:对于以下压缩类型,不需要指定任何额外的inputformat方法,flink可以自动识别并且解压。但是,压缩文件可能不会并行读取,可能是顺序读取的,这样可能会影响作业的可伸缩性。因为Transform算子基于Source算子操作,所以首先构建Flink执行环境及Source算子,后续Transform算子操作基于此:将DataSet中的每一个元素转换为另外一个元素:将DataSet中的每一个元素转换为0…n个元素:将一个分区中的元素转换为另一个元素:过滤出来一些符合条件的元素,返回boolean值为true的元素:可以对一个dataset或者一个group来进行聚合计算,最终聚合成一个元素:将一个dataset或者一个group聚合成一个或多个元素
reduceGroup是reduce的一种优化方案;
它会先分组reduce,然后在做整体的reduce;这样做的好处就是可以减少网络IO:选择具有最小值或最大值的元素:数据集上进行聚合求最值(最大值、最小值):Aggregate只能作用于元组上注意:
要使用aggregate,只能使用字段索引名或索引名称来进行分组 groupBy(0) ,否则会报一下错误:
Exception in thread “main” java.lang.UnsupportedOperationException: Aggregate does not support grouping with KeySelector functions, yet.去除重复的数据:取前N个数:将两个DataSet按照一定条件连接到一起,形成新的DataSet:左外连接,左边的Dataset中的每一个元素,去连接右边的元素此外还有:rightOuterJoin:右外连接,左边的Dataset中的每一个元素,去连接左边的元素fullOuterJoin:全外连接,左右两边的元素,全部连接下面以 leftOuterJoin 进行示例:交叉操作,通过形成这个数据集和其他数据集的笛卡尔积,创建一个新的数据集和join类似,但是这种交叉操作会产生笛卡尔积,在数据比较大的时候,是非常消耗内存的操作:联合操作,创建包含来自该数据集和其他数据集的元素的新数据集,不会去重:Flink也有数据倾斜的时候,比如当前有数据量大概10亿条数据需要处理,在处理过程中可能会发生如图所示的状况:这个时候本来总体数据量只需要10分钟解决的问题,出现了数据倾斜,机器1上的任务需要4个小时才能完成,那么其他3台机器执行完毕也要等待机器1执行完毕后才算整体将任务完成;所以在实际的工作中,出现这种情况比较好的解决方案就是接下来要介绍的—rebalance(内部使用round robin方法将数据均匀打散。这对于数据倾斜时是很好的选择。)按照指定的key进行hash分区:根据指定的key对数据集进行范围分区:根据指定的字段值进行分区的排序:将数据输出到本地集合:将数据输出到文件Flink支持多种存储设备上的文件,包括本地文件,hdfs文件等Flink支持多种文件的存储格式,包括text文件,CSV文 香港云主机件等和DataSet一样,DataStream也包括一系列的Transformation操作。Flink可以使用 StreamExecutionEnvironment.addSource(source) 来为我们的程序添加数据来源。
Flink 已经提供了若干实现好了的 source functions,当然我们也可以通过实现 SourceFunction 来自定义非并行的source或者实现 ParallelSourceFunction 接口或者扩展 RichParallelSourceFunction 来自定义并行的 source。Flink在流处理上的source和在批处理上的source基本一致。大致有4大类:下面使用addSource将Kafka数据写入Flink为例:如果需要外部数据源对接,可使用addSource,如将Kafka数据写入Flink, 先引入依赖:将Kafka数据写入Flink:基于网络套接字的:将DataSet中的每一个元素转换为另外一个元素:采用一个数据元并生成零个,一个或多个数据元。将句子分割为单词的flatmap函数:计算每个数据元的布尔函数,并保存函数返回true的数据元。过滤掉零值的过滤器:逻辑上将流分区为不相交的分区。具有相同Keys的所有记录都分配给同一分区。在内部,keyBy()是使用散列分区实现的。指定键有不同的方法。此转换返回KeyedStream,其中包括使用被Keys化状态所需的KeyedStream:被Keys化数据流上的“滚动”Reduce。将当前数据元与最后一个Reduce的值组合并发出新值:具有初始值的被Keys化数据流上的“滚动”折叠。将当前数据元与最后折叠的值组合并发出新值:在被Keys化数据流上滚动聚合。min和minBy之间的差异是min返回最小值,而minBy返回该字段中具有最小值的数据元(max和maxBy相同):可以在已经分区的KeyedStream上定义Windows。Windows根据某些特征(例如,在最后5秒内到达的数据)对每个Keys中的数据进行分组。这里不再对窗口进行详解,有关窗口的完整说明,请查看这篇文章:Flink 中极其重要的 Time 与 Window 详细解析Windows可以在常规DataStream上定义。Windows根据某些特征(例如,在最后5秒内到达的数据)对所有流事件进行分组。注意:在许多情况下,这是非并行转换。所有记录将收集在windowAll 算子的一个任务中。将一般函数应用于整个窗口。注意:如果您正在使用windowAll转换,则需要使用AllWindowFunction。下面是一个手动求和窗口数据元的函数:将函数缩减函数应用于窗口并返回缩小的值:将函数折叠函数应用于窗口并返回折叠值:两个或多个数据流的联合,创建包含来自所有流的所有数据元的新流。注意:如果将数据流与自身联合,则会在结果流中获取两次数据元:在给定Keys和公共窗口上连接两个数据流:在给定的时间间隔内使用公共Keys关联两个被Key化的数据流的两个数据元e1和e2,以便e1.timestamp + lowerBound
在给定Keys和公共窗口上对两个数据流进行Cogroup:“连接”两个保存其类型的数据流。连接允许两个流之间的共享状态:类似于连接数据流上的map和flatMap:根据某些标准将流拆分为两个或更多个流:从拆分流中选择一个或多个流:支持将数据输出到:除此之外,还支持:下面以sink到kafka为例:到此,关于“Flink流计算常用算子是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注开发云网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: MyBatis-Plus如何配置环境

小编给大家分享一下MyBatis-Plus如何配置环境,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 My…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 10/15 10:20
下一篇 10/15 10:20

相关推荐