从Example出发:读懂本地任务执行流程

微信公众号:深广大数据Club

关注可了解更多大数据相关的资讯。问题或建议,请公众号留言;

[如果你觉得深广大数据Club对你有帮助,欢迎赞赏]

从上一片《Flink源码解析 | 从Example出发理解Flink-Flink启动》之后,本文讲解Apache Flink example中的SocketWindowWordCount实例代码的实现。

SocketWindowWordCount

首先我们先来看下SocketWindowWordCount的重要代码内容

上述代码分为以下几块内容:

获取执行环境

实例化DataStream对象

执行数据处理获取windowCounts

Map - flatMap

transaction - keyby

reduce

打印

调用env的execute运行任务

这里的MapFunction以及ReduceFunction可以根据你的业务场景自行实现。

StreamExecutionEnvironment实例化

创建StreamExecutionEnvironment时线检查是否存在contextEnvironmentFactory,如果有直接从contextEnvironmentFactory创建返回。没有则通过ExecutionEnvironment创建。

本地模式调用createLocalEnvironment()方法创建StreamEnvironment。

方法一轮轮调用下来最终实例化一个LocalStreamEnvironment返回。

LocalStreamEnvironment

整体代码分为以下几步:

创建streamGraph

通过streamGraph创建jobGraph

创建Configuration

创建MiniClusterConfiguration,并设置每一个TaskManager使用的slot数量setNumSlotsPerTaskManager

创建miniCluster

通过miniCluster.executeJobBlocking执行jobGraph

注:jobGraph是我们要利用miniCluster运行获取结果的Graph有向无环图。

MiniCluster

MiniCluster所做的事情较多,具体步骤如下:

获取配置信息

初始化 IO Format类

注册MetricsRegistry并实例化jobManagerMetricGroup

启动rpc服务

启动HA服务

启动resourceManager

启动TaskManagers

启动调度程序rest端口

在提交工作时启动JobManagers的分配器

获取ResourceManagerLeader、dispatcherLeaderRetriever并启动

总结

简化的描述下整个流程的处理过程:

创建获取对应的StreamExecutionEnvironment对象:LocalStreamEnvironment

调用StreamExecutionEnvironment对象的execute方法

获取streamGraph

获取jobGraph

实例化miniCluster

miniCluster.executeJobBlocking指定要运行的jobGraph

启动minCluster执行任务

启动各类所需服务(rpc、ha、resourceManager、TaskManagers等等)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181122G026EN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券