2022.4.2学习成果

Flink中的编程模型

4.1 编程模型

在Flink,编程模型的抽象层级主要分为以下4种,越往下抽象度越低,编程越复杂,灵活度越高。


这里先不一一介绍,后续会做详细说明。这4层中,一般用于开发的是第三层,即DataStrem/DataSetAPI。用户可以使用DataStream API处理无界数据流,使用DataSet API处理有界数据流。同时这两个API都提供了各种各样的接口来处理数据。例如常见的map、filter、flatMap等等,而且支持python,scala,java等编程语言,后面的demo主要以scala为主。

4.2 程序结构

与其他的分布式处理引擎类似,Flink也遵循着一定的程序架构。下面以常见的WordCount为例:

val env = ExecutionEnvironment.getExecutionEnvironment

// get input data
val text = env.readTextFile("/path/to/file")

val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
  .map { (_, 1) }
  .groupBy(0)
  .sum(1)

counts.writeAsCsv(outputPath, "\n", " ")

Flink基本架构
2.1、JobManager和TaskManager
JobManager:也称之为Master用于协调分布式执行,它们用来调度task协调检查点,协调失败时恢复等。Flink运行时至少存在一个master处理器,如果配置高可用模式则会存在多个master处理器,其中有一个是leader其他都是standby。

TaskManager:也称之为Worker,用于执行一个dataflow的task(或者特殊的subtask)、数据缓冲和datastream的交换,Flink运行时至少会存在一个worker处理器。

Master和Worker处理器可以直接在物理机上启动或者通过相Yarn这样的资源调度框架。
Worker连接到Master,告知自身的可用性进而获得任务分配。

posted @ 2022-04-02 23:28  千帆万木春  阅读(25)  评论(0)    收藏  举报