Flink的安装与部署

Posted 宝哥大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink的安装与部署相关的知识,希望对你有一定的参考价值。

文章目录

还有视频讲解在我的B站-宝哥chbxw, 希望大家可以支持一下,谢谢。

  Flink 的安装和部署主要分为本地(单机)模式和集群模式,其中本地模式只需直接解压就可以使用,不以修改任何参数,一般在做一些简单测试的时候使用。本地模式在本文不再赘述。集群模式包含:

  • Standalone
  • Flink on Yarn
  • Mesos
  • Docker
  • Kubernetes
  • AWS
  • Goole Compute Engine

目前在企业中使用最多的是 Flink on Yarn 模式。本文讲 Standalone 和 Flink onYarn 这两种模式。

一、集群基本架构

  Flink 整个系统主要由两个组件组成,分别为 JobManagerTaskManager,Flink 架构也遵循 Master-Slave 架构设计原则,JobManager 为 Master 节点,TaskManager 为 Worker(Slave)节点。所有组件之间的通信都是借助于 Akka Framework,包括任务的状态以及Checkpoint 触发等信息。

1.1、Client 客户端

  客户端负责将任务提交到集群,与 JobManager 构建 Akka 连接,然后将任务提交到JobManager,通过和 JobManager 之间进行交互获取任务执行状态。客户端提交任务可以采用 CLI 方式或者通过使用 Flink WebUI 提交,也可以在应用程序中指定JobManager的RPC网络端口构建 ExecutionEnvironment 提交 Flink 应用。

1.2、 JobManager

  JobManager 负责整个 Flink 集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中 TaskManager 上 TaskSlot 的使用情况,为提交的应用分配相应的TaskSlots 资源并命令TaskManger启动从客户端中获取的应用。JobManager 相当于整个集群的 Master 节点,且整个集群中有且仅有一个活跃的JobManager,负责整个集群的任务管理和资源管理。JobManager 和TaskManager 之间通过 Actor System 进行通信,获取任务执行的情况并通过Actor System将应用的任务执行情况发送给客户端。同时在任务执行过程中,Flink JobManager 会触发 Checkpoints 操作,每个TaskManager节点收到 Checkpoint触发指令后,完成 Checkpoint 操作,所有Checkpoint 协调过程都是在 Flink JobManager中完成。当任务完成后,Flink 会将任务执行的信息反馈给客户端,并且释放掉 TaskManager中的资源以供下一次提交任务使用。

1.3、TaskManager

  TaskManager 相当于整个集群的 Slave 节点,负责具体的任务执行和对应任务在每个节点上的资源申请与管理。客户端通过将编写好的 Flink 应用编译打包,提交到 JobManager,然后 JobManager 会根据已经注册在 JobManager 中 TaskManager 的资源情况,将任务分配给有资源的 TaskManager 节点,然后启动并运行任务。TaskManager 从 JobManager 接收需要部署的任务,然后使用 Slot 资源启动 Task,建立数据接入的网络连接,接收数据并开始数据处理。同时 TaskManager 之间的数据交互都是通过数据流的方式进行的。
  可以看出,Flink 的任务运行其实是采用多线程的方式,这和 MR 多JVM 进程的方式有很大的区别 Fink 能够极大提高 CPU 使用效率,在多个任务和 Task 之间通过 TaskSlot方式共享系统资源,每个 TaskManager 中通过管理多个 TaskSlot 资源池进行对资源进行有效管理。

二、集群安装和部署

2.1、Standlone

2.2、Flink提交到Yarn

2.3、Flink提交到HA

三、Flink并行度和Slot

  Flink中每一个worker(TaskManager)都是一个JVM进程,它可能会在独立的线程(Solt)上执行一个或多个subtask。Flink的每个TaskManager为集群提供Solt。Solt的数量通常与每个TaskManager节点的可用CPU内核数成比例,一般情况下Slot的数量就是每个节点的CPU的核数。
  Slot的数量由集群中flink-conf.yaml配置文件中设置taskmanager.numberOfTaskSlots的值为3,这个值的大小建议和节点CPU的数量保持一致。

一个任务的并行度设置可以从4个层面指定:

  • Operator Level(算子层面)。
  • Execution Environment Level(执行环境层面)。
  • Client Level(客户端层面)。
  • System Level(系统层面)。
    这些并行度的优先级为OperatorLevel > ExecutionEnvironmentLevel > Client Level > System Level

3.1、并行度设置

3.1.1、Operator Level

Operator、SourceSink目的地的并行度可以通过调用setParallelism()方法来指定

3.1.2、Execution Environment Level

任务的默认并行度可以通过调用setParallelism()方法指定。为了以并行度3来执行所有的Operator、Source 和 Sink,可以通过如下方式设置执行环境的并行度

3.1.3、Client Level

并行度还可以在客户端提交Job到Flink时设定。对于 CLI 客户端,可以通过-p参数指定并行度。

3.1.4、System Level

在系统级可以通过设置flink-conf.yaml文件中的parallelism.default属性来指定所有执行环境的默认并行度。

3.2、并行度案例分析

Flink集群中有3个TaskManager节点,每个TaskManager的Slot 数量为 3

以上是关于Flink的安装与部署的主要内容,如果未能解决你的问题,请参考以下文章

Flink的安装和部署--伪分布模式

Flink的安装和部署--伪分布模式

2-flink单机部署与job提交

Flink_Day01:安装部署与快速入门

(2021-03-26)大数据学习之Flink安装部署以及任务提交/调度详解

flink yarn 部署指南