Flink 源码分析(三):WordCount 程序执行
更新至 Flink 1.9.0 版本
下面以 Flink 工程自带的 wordcount 程序为例,分析应用执行。
执行环境
创建执行环境:
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
org.apache.flink.streaming.api.environment.StreamExecutionEnvironment
流式程序执行的上下文。StreamExecutionEnvironment 提供了方法控制 Job 执行(例如:设置并发、错误容忍、检查点参数)和外界交互(数据访问)。
如果在 IDE 中启动,则创建 org.apache.flink.streaming.api.environment.LocalStreamEnvironment
实例,在本地 JVM 运行。
如果在集群中启动,则创建 org.apache.flink.streaming.api.environment.RemoteStreamEnvironment
实例,在集群中运行。
生成 StreamGraph
WordCount 代码,DataStream 流转如下:
- Source
env.fromElements(WORDS)
数据源; - Transform
flatMap(new Tokenizer())
分词; - Transform
keyBy(0).sum(1)
计数; - Sink
print()
打印。
每一个 org.apache.flink.streaming.api.datastream.DataStream
实例都有一个表示创建该 DataStream 的算子 org.apache.flink.api.dag.Transformation
。
Transformation 及其子类:
在程序执行 env.execute("Streaming WordCount")
,会先通过 org.apache.flink.streaming.api.graph.StreamGraphGenerator
生成 org.apache.flink.streaming.api.graph.SteamGraph
实例。
生成的 StreamGraph 如下图所示:
生成 JobGraph
TODO