一、基础知识
Flink有非常灵活的分层API设计,核心层
就是DataStream/DataSet API。新版已经实现流批一体,DataSet API被弃用,统一使用DataStream API
处理流数据和批数据。
DataStream本身是Flink中一个用来表示数据集合的类,Flink代码其实就是基于这种数据类型的处理。一个Flink程序,其实就是对DataStream的各种转换
,具体来说,代码基本上都由以下几个部分组成:(1)获取执行环境 execution enviroment (2)读取数据源 source (3)定义基于数据的转换操作 transformations (4)定义计算结果的输出位置 sink (5)触发程序执行 execute。
其中第一部分的获取执行环境和第五部分的触发程序执行,都可以认为是对执行环境的操作,所以我们可以将其精简为下面四个部分:
- 执行环境 enrironment
- 数据源 source
- 转换操作 transformation
- 输出 sink
二、创建执行环境
flink程序的第一步就是创建执行环境,这是flink程序的基础。
在代码中创建执行环境,就是调用这个类的静态方法,具体有以下三种形式:
- getExecutionEnvironment(),会根据当前运行的方式,
自行决定该返回什么样的运行环境
,不需要做格外的判断,简单高效
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
- createLocalEnvironment(),返回一个
本地执行环境
,可以在调用时传入一个参数,指定默认的并行度,如果不传入就默认并行度就是本地的CPU核心数
StreamExecutionEnvironment localEnv = StreamExecutionEnvironment.createLocalEnvironment ();
- createRemoteEnvironment(),这个方法返回
集群执行环境
,需要在调用的时候指定JobManager的主机名和端口号,并指定在集群中运行的jar包
StreamExecutionEnvironment remoteEnv = StreamExecutionEnvironment.createRemoteEnvironment(
"host", JobManager主机名
1234, JobManager进程端口号
"path/to/jarFile.jar" 提交到JobManager的Jar包
);
通过以上三种方式获取到程序执行环境后,我们可以对执行环境进行灵活的设置,比如全局设置的并行度、禁用算子链等。