Apache Flink简介

一、发展历史

Flink起源于一个名为Stratosphere的研究项目,目的是建立下一代大数据分析平台,于2014年4月16日成为Apache孵化器项目。Stratosphere的最初版本是基于Neffele的研究论文。下面的图表显示了Stratosphere随时间的演化:

二、Flink架构

Flink1.X的架构包括各种组件,比如deploy,core processing和APIs。下图展示了各种组件:

Flink具有分层结构,其中每个组件是特定层的一部分。每层建立在其他的顶部,用于清晰的抽象。Flink被设计为可以在local、yarn以及cloud上运行。Runtime是Flink的核心数据处理引擎,通过以JobGraph形式的APIs接收program,JobGraph是一个简单的并行数据流。

DataStrame和DataSet API是程序员可以用来定义Job的接口。在编译程序时,这些API会生成JobGraph。一但编译后,DataSet API允许优化器生成最佳执行计划。然后根据部署模型将优化的JobGraph提交给执行者。您可以选择本地、远程或yarn部署模式。如果你有一个Hadoop集群已经运行,可以使用yarn的部署模式。

三、Flink分布式执行过程

Flink分布式执行包括两个重要的进程,即master和worker。当一个flink程序执行时,会有许多的进程参与执行,分别为Job Manager、Task Manager和Job Client。下图展示了Flink程序的执行过程:

Flink的程序需要提交到Job Client。Job Client然后提交作业到Job Manager,Job Manager负责资源分配和作业执行。Job Manager首先做的事情是分配需要的资源,一旦资源分配完成,task会被提交到各自的Task Manager。在接收的task上,Task Manager会初始化一个线程用来启动执行(Execution),当execution准备就绪,Task Manager会持续向Job Manager报告状态改变(比如启动execution,运行execution,执行结束),一旦作业执行结束,执行的结果会被发送到Client。

JobManager

master节点的进程,称之为JobManager,协调和管理程序的execution,主要的作用包括:调度task,管理checkpoint,失败恢复等等。Job Manager包括以下三个非常重要的组件:
             (1)Actor system:一个容器,提供调度,配置,登录等服务
             (2)Scheduler:在Flink中Executors被称之为task slots,每个Task Manager需要管理一个或多个task slot。在内部,Flink决定哪些task需要共享slot,哪些task需要被分配到相应的slot中,主要是由SlotSharingGroup 和 CoLocationGroup实现这种操作
             (3)Check pointing:容错机制

Task Manager

Task Manager是worker节点,用来在JVM中执行一个或多个线程,task执行的并行度取决于每个TaskMamager的可用的task slot(槽)的数量,在同一个slot的线程共享同一个JVM,在同一个JVM中的他上课共享TPC连接和心跳信息。

Job Client

Job Client不是Flink程序执行的内部组成部分,而是执行的开始。Job Client负责接收应用程序,然后创建数据流,最后提交数据流到Job Manager。一旦执行完成,Job Client会将结果返回给用户。

一个数据流是一个执行计划,以下面的wordcount为例:

        当client接收到程序后,会将其转换为数据流,上述代码的数据流如下图所示:

         数据流直接从源到map操作不需要shuffle数据,但是对于GroupBy操作,Flink需要根据key重新分布数据。如下图:

猜你喜欢

转载自blog.csdn.net/jmx_bigdata/article/details/84031768