Flink实现原理–流执行环境
Flink可以支持批和流数据的计算。在实现层面的执行环境上,Flink有两套不同的类来实现批和流的执行环境。本文就来概要分析一下Flink的流执行环境。
Flink的执行环境
执行环境是对外的应用开发层面的概念,用户在实现Flink数据处理任务时,需要直接使用执行环境的对象和方法来对当前执行环境进行创建和配置。
Flink提供了两套执行环境,一套是批执行环境,其父类是:ExecutionEnvironment。一套是流执行,其父类是:StreamExecutionEnvironment。而且为了调试和测试的方便,又实现了本地和远端的执行环境。也就是说,总结起来执行环境有:
- 批本地执行环境
- 批远端执行环境
- 流本地执行环境
- 流远端执行环境
其环境的实现类如下表:
类别 | 本地环境 | 远端环境 |
批执行环境 | LocalEnvironment | RemoteEnvironment |
流执行环境 | LocalStreamEnvironment | RemoteStreamEnvironment |
流执行环境实现
对于流执行环境实现的父类是:StreamExecutionEnvironment。根据不同的执行情况又实现了多个流执行环境的子类。流执行环境的类继承关系如下图所示:
在流执行环境的父类中public JobExecutionResult execute(StreamGraph streamGraph)
函数是对外在编写流处理任务时需要调用的,它是任务执行的入口,各种子类会调用父类的execute来执行生成的StreamGraph对象。
LocalStreamEnvironment
是流的本地执行环境的实现。在该环境下,所有服务和模块都在本地JVM的多线程中实现。总体流程如下:
(1)执行Flink作业的main函数生成Streamgraph对象,转化为JobGraph。
(2)设置任务运行的配置信息。
(3)根据配置信息启动对应的MiniCluster。
(4)根据配置信息和miniCluster生成对应的MiniClusterClient。
(5)通过MiniClusterClient提交JobGraph到MiniCluster。
RemoteStreamEnvironment
在大规模数据中心中部署的Flink生成集群的执行环境。当将作业发布到Flink集群的时候,使用RemoteStreamEnvironment。其基本的工作流程如下:
(1)执行Flink作业的Main函数生成Streamgraph,转化为JobGraph。
(2)设置任务运行的配置信息。
(3)提交JobGraph到远程的Flink集群。
StreamContextEnvironment
在Cli命令行或者单元测试时候会被使用,执行步骤同上。
StreamPlanEnvironment
在FlinkWebUI管理界面中可视化展现Job的时候,专门用来生成执行计划(实际上就是StreamGraph),如图33所示。
ScalaShellStreamEnvironment
这是ScalaShell执行环境,可以在命令行中交互式开发Flink作业。其基本工作流程如下:
(1)校验部署模式,目前ScalaShell仅支持attached模式。
(2)上传每个作业需要的Jar文件。其余步骤与RemoteStreamEnvironment类似。
小结
本文对Flink的流任务执行环境进行了概要的说明。并对不同类型的流执行环境进行了介绍。