
fromCollection:从本地集合读取数据
例:
readTextFile:从文件中读取:
readTextFile可以对一个文件目录内的所有文件,包括所有子目录中的所有文件的遍历访问方式:
对于以下压缩类型,不需要指定任何额外的inputformat方法,flink可以自动识别并且解压。但是,压缩文件可能不会并行读取,可能是顺序读取的,这样可能会影响作业的可伸缩性。
因为Transform算子基于Source算子 *** 作,所以首先构建Flink执行环境及Source算子,后续Transform算子 *** 作基于此:
将DataSet中的每一个元素转换为另外一个元素:
将DataSet中的每一个元素转换为0n个元素:
将一个分区中的元素转换为另一个元素:
过滤出来一些符合条件的元素,返回 boolean值为true 的元素:
可以对一个dataset或者一个group来进行聚合计算,最终 聚合成一个元素:
将一个dataset或者一个group 聚合成一个或多个元素 。
reduceGroup是reduce的一种优化方案;
它会先分组reduce,然后在做整体的reduce;这样做的好处就是可以减少网络IO:
选择具有最小值或最大值的 元素:
在数据集上进行聚合求 最值 (最大值、最小值):
Aggregate只能作用于元组上
去除重复的数据:
取前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文件等
在Flink进行数据处理的时候,有两个最重要的两个组件,分别是:作业管理器(JobManager)和任务管理器(TaskManager)。对于一个提交执行的作业,JM是真正的管理者,负责管理和调度工作。如果集群没有配置高可用的话,只能有一个JM。TM是负责工作的工作者,负责执行任务和处理数据,所以可以有很多个。
整个JM由三个部分组成,分别是JobMaster、ResourceManager、Dispatcher。
JMaster是JManager中最核心的组件,负责处理单独的作业。所以每一个Job都会有一个对应JobMaster与之对应,多个job可以同时运行在一个FLink集群中,也就证明一个Flink集群中可以有多个JobMaster同时存在。在作业被提交的时候,JMaster会率先接受到要执行的应用。这些应用包括:Jar包、数据流图(dataflow graph)、作业图(JobGraph)。然后将接收到的作业图转换成为一个物理层面的数据流图,也就是执行图,这个执行图包含了所有要并发执行的任务。随后JMaster会根据这个执行图去到RM中申请必要的资源。一旦获得到了足够的资源,就会将执行图发送到要运行执行图的TaskMaster上面。并且在程序运行的过程中,JobMaster会负责协调所有的需要中央协调的工作,如保存点机制。
RM在Flink的集群中只有一个,它主要负责的是资源的分配与管理,也就是对TaskManager上的solt的分配工作。并且在面对不同的环境的时候,RM也有不同的体现。如果是standalone,因为TM是独立运行的,所有RM只能分发可用的TM的任务槽,没办法单独启动TM。但是如果是yarn的工作模式下,RM能够将有空闲的TM发送给JMaster,如果资源不够使用的话,就会向yarn发起请求提供启动TM的容器。并且如果有的TM处于空闲状态,RM还负责停止它们的工作。
它主要负责提供Rest风格的接口来提交应用。并且还负责为每一个新提交的作业启动一个新的JMaster组件,并且还会启动一个WEB UI,方便用来展示和键控作业执行的信息。
TM负责FLink集群中的具体工作部分,数据流的计算就是由这个组件来完成的,每一个TM都会有一定数量的任务槽,这个任务槽是一个TM上最小的资源封装单位,solt的数量决定了TM能够并行处理的任务的数量。在TM启动之后,会向RM注册自己的solt,当收到RM对其发送的指令之后,就会根据要求发送能够提供计算的solt给JMaster调用,这样数据计算就能够实现了,并且在进行计算的过程中,TaskManager可以缓冲数据,还能够与其他的TM交互完成数据的交换。
因为我本人所接触的Flink的部署模式都是基于资源管理平台yarn来实现工作的,采用的作业提交方式也是通过per-job提交方式进行提交的,所以在本次讲述的过程中,也是以这个内容为蓝本展开讲解。
yarn-per-job作业提交流程:
在单作业模式下,Flink集群不会预先启动,而是在进行作业提交的时候,才会启动新的JobManager。
1客户端向yarn提交作业,并且需要将Flink的Jar包和配置文件信息上传到HDFS,以便后续启动FLink相关组件的容器。
2YARN资源管理器分配Container资源,启动Application Master,这个APP里面包含了Flink的JobManager,并且要将提交上来的作业交给JMaster。
3JMaster向flink的rm请求资源。
4flink的rm向yarn请求container资源。
5yarn启动包含TM的container资源。
6TM向JMaster注册自己拥有的solt数量。
7flink的RM向TM申请solt。
8TM连接到对应的JMaster,然后通过solt。
9JMaster将要执行的任务分发给TM,执行。
以上就是关于关于 Flink checkpoint,都在这里(二)全部的内容,包括:关于 Flink checkpoint,都在这里(二)、Flink 原理详解、Flink-算子(1)——DataSet等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)