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 整个系统主要由两个组件组成,分别为 JobManager 和 TaskManager,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、Source
和Sink
目的地的并行度可以通过调用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的安装与部署的主要内容,如果未能解决你的问题,请参考以下文章