1、StreamExecutionEnvironment:

StreamExecutionEnvironment是构建执行任务环境以及任务的启动的入口,主要具备以下几方面的职责:

a、存储全局相关的参数,如执行环境配置ExecutionConfig、检查点配置CheckpointConfig,任务的转换算子transformations等等;

private final ExecutionConfig config = new ExecutionConfig();

执行环境的相关配置

private final CheckpointConfig checkpointCfg = new CheckpointConfig();

检查点的相关配置

protected final List<Transformation<?>> transformations = new ArrayList<>();

transformations是转换算子的集合,但不包含source,构建任务时进一步转化为DataStream。

b、对外提供统一的创建ExecutionEnvironment入口,他提供了一些静态方法,如getExecutionEnvironment方法;

补充一点,local模式启动时,如果引入了flink-runtime-web期望使用web-UI时,可以通过createLocalEnvironmentWithWebUI方法创建执行环境

StreamExecutionEnvironment streamEnv = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());

默认端口是8081或者通过Configuration指定,如不使用此方法创建,则每次启动会随机生成一个端口来使用。

c、提供一些列的全局参数的配置/获取入口,诸如set/get/enable等方法;

如设置并行度、检查点、chain开关等等

d、如果把flink的流计算过程简单理解为数据输入->转换计算->数据输出的三部曲的话,这里作为入口提供了关于数据输入的一些列添加数据输入的方法;

如formXXX集合系列、addSource数据源系列,socket/file系列等等。

e、提供计算任务启动执行的入口。

StreamExecutionEnvironment有两个子类,分别是LocalStreamEnvironment和RemoteStreamEnvironment,LocalStreamEnvironment用于构建和执行基于本地jvm进程的计算任务,RemoteStreamEnvironment用于构建和提交基于远端flink集群的计算任务。

2、DataStream



DataStream个人理解是流式数据处理的核心API,同时也是对转换算子Transformation的进一步封装,在持有某一个算子数据的同时也持有StreamExecutionEnvironment执行环境对象,按照操作的对象和类型可以简单划分为四大类:

a、对于单条数据的操作:如map、filter等操作

b、对于多条数据的操作:如keyBy、partition等操作

c、对多个流转换合并为1个流的操作:如union、connect等操作

d、对1个流拆分为多个流的操作:如split操作

该类的集成体系如下图所示,可自行理解对应到上面的分类,当然在org.apache.flink.streaming.api.datastream包下面还定义了一些其他的Stream暂不在本次谈论范围之列:

3、Transformation

Transform被定义为了一个抽象类,在另一篇分析https://www.cnblogs.com/wangwei0721/p/14012174.htmlStreamGraph生成过程中有涉及,再看一次他的集成体系



同样的,一方面可以将算子转换的分类与DataStream对算子的操作的分类对应起来,同时从另一个维度来看,也可以简单的将Transformation划分为以下两类:

a、继承自PhysicalTransformation的一些服务算子转换

在PhysicalTransformation抽象类中,定义了public abstract void setChainingStrategy(ChainingStrategy strategy);模板方法,该方法要求其子类提供算子合并策略ChainingStrategy,该参数在后续计算优化算子合并时会用到。

ps:ChainingStrategy是一个枚举类,有HEAD、NEVER和ALWAYS三个枚举值,HEAD标识该算子仅作为头,不参与合并链,但支持后继合并到自己,NEVER标识该算子既不向前合并也不被后继合并,要作为独立节点处理,ALWAYS标识该算子的合并意愿很强,支持随时按规则合并。

在PhysicalTransformation的子类中,由于该全部子类是支持执行物理转换,意思是说该算子时一定产生数据输入和输出的,所以在全部子类中都Transformation作为input同时持有一个StreamOperatorFactory对象,用于产生对应的StreamOperator将来作为outPut;

b、其他的逻辑算子转换

其他逻辑转换算子则仅持有Transformation作为input输入以及一些其他的属性。

4、StreamOperator

StreamOperator是一个接口,标识了流计算的具体算子转换对象接口,具备相关的生命周期、快照等行为。

5、把这四个类放一起分析的原因

研究下flink源码,不难看出以上四个类可以理解为都是位于DataStream API层,他们承载了将用户的输入程序化构建为DAG图,将计算逻辑进行互相合理转化,弄清楚他们的属性和行为对进一步分析flink源码是很有必要的。

flink:StreamExecutionEnvironment、DataStream和Transformation与StreamOperator的更多相关文章

  1. Apache Flink -Streaming(DataStream API)

    综述: 在Flink中DataStream程序是在数据流上实现了转换的常规程序. 1.示范程序 import org.apache.flink.api.common.functions.FlatMap ...

  2. Flink Program Guide (2) -- 综述 (DataStream API编程指导 -- For Java)

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  3. Flink Program Guide (3) -- Event Time (DataStream API编程指导 -- For Java)

    Event Time 本文翻译自DataStream API Docs v1.2的Event Time ------------------------------------------------ ...

  4. [源码分析] 带你梳理 Flink SQL / Table API内部执行流程

    [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 目录 [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 0x00 摘要 0x01 Apac ...

  5. Flink Program Guide (1) -- 基本API概念(Basic API Concepts -- For Java)

    false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...

  6. Flink官网文档翻译

    http://ifeve.com/flink-quick-start/ http://vinoyang.com/2016/05/02/flink-concepts/ http://wuchong.me ...

  7. <译>Flink编程指南

    Flink 的流数据 API 编程指南 Flink 的流数据处理程序是常规的程序 ,通过再流数据上,实现了各种转换 (比如 过滤, 更新中间状态, 定义窗口, 聚合).流数据可以来之多种数据源 (比如 ...

  8. 《从0到1学习Flink》—— Data Source 介绍

    前言 Data Sources 是什么呢?就字面意思其实就可以知道:数据来源. Flink 做为一款流式计算框架,它可用来做批处理,即处理静态的数据集.历史的数据集:也可以用来做流处理,即实时的处理些 ...

  9. 入门大数据---Flink学习总括

    第一节 初识 Flink 在数据激增的时代,催生出了一批计算框架.最早期比较流行的有MapReduce,然后有Spark,直到现在越来越多的公司采用Flink处理.Flink相对前两个框架真正做到了高 ...

随机推荐

  1. Java学习的第四十二天

    1.例4.7弦截法求方程f(x)=x^3-5x^2+16x-80=0的根 import java.util.Scanner; import java.lang.*; public class cjav ...

  2. Java学习的第二十三天

    1.今天学习了用log4j记录日志 综合实例 2.不知道日志什么时候用到 3.明天学习12章

  3. Linux下的django项目01

    1.初始化项目结构 └─shiyanlou_project # 项目根路径 │ .gitignore     # 提交git仓库时,不提交的文件必须要在这里进行标注 │ README.en.md # ...

  4. Nginx跳转配置

    1.携带目录调转到后端,后端无目录,location配置如下 例子: i2.jusdacfj.com/ideas_edi/--10.0.2.137:7040/10.0.2.138:7040 locat ...

  5. 删除指定路径下指定天数之前(以文件的创建日期为准)的文件:BAT + REG + Ritchie Lawrence 日期函数

    代码如下: @echo off::演示:删除指定路径下指定天数之前(以文件的创建日期为准)的文件.::如果演示结果无误,把del前面的echo去掉,即可实现真正删除.::本例调用了 Ritchie L ...

  6. [Luogu P2341] [HAOI2006]受欢迎的牛 (缩点+bitset)

    题面 传送门:https://www.luogu.org/problemnew/show/P2341 Solution 前排提示,本蒟蒻做法既奇葩又麻烦 我们先可以把题目转换一下. 可以把一头牛喜欢另 ...

  7. 【CF1443F】Identify the Operations 题解

    原题链接 题意简介 建议去原题看.这题意我表达不清楚. 大概就是给你一个 n 的排列,现在要求你进行 m 次操作. 每次操作,你会在现有的排列中删去一个数,然后选择其左边或右边的一个与之相邻的数加入 ...

  8. 2.1获取Git仓库-2.2记录每次更新到仓库

    2.1 获取 Git 仓库 获取 Git 仓库通常有两种方式 将尚未进行版本控制的本地目录转换为 Git 仓库: 从其它服务器 克隆 一个已存在的 Git 仓库. 在已存在目录中初始化仓库 首先进入该 ...

  9. 安卓快速关机APP

    目录 自说自话 使用方法 自说自话 像我这样每天晚上睡觉关机的人不知道有多少,反正我每天都有关机的需求.因此我特别讨厌长按关机键进行关机,感觉浪费我好几秒的生命. 因此我开发了这款APP,主要是自用, ...

  10. from `float` to `np.floating` is deprecated

    运行tensorflow测试程序时,出现:FutureWarning: Conversion of the second argument of issubdtype from `float` to ...