Flink面试题整理

2.Flink的运行必须依赖Hadoop组件吗?

Flink 可以完全独立于 Hadoop, 在不依赖 Hadoop 组件下运行。 但是做为大数据的基础设施, Hadoop 体系是任何大数据框架都绕不过去的。 Flink 可以集成众多Hadooop 组件, 例如 Yarn、 Hbase、 HDFS 等等。 例如, Flink 可以和 Yarn 集成做资源调度, 也可以读写 HDFS, 或者利用 HDFS 做检查点

3.Flink 集群运行时角色

Flink 运行时由Flink面试题整理_第1张图片两种类型的进程组成: 一个 JobManager 和一个或者多个TaskManager

 

Client 并不是处理系统的一部分,它只负责作业的提交。具体来说,就是调用程序的main方法,将代码转换成“数据流图”(Dataflow Graph),并最终生成作业图(JobGraph),一并发送给JobManager。提交之后,任务的执行,其实就跟客户端没什么关系了,我们可以在客户端选择断开与JobManager的连接(分离模式),也可以继续保持连接(附加模式)。

客户端也可以随时连接到JobManager,获取当前作业的状态和执行结果,也可以发送请求取消作业论通过Web UI 还是命令行执行“flink run”的相关操作,都是通过客户端实现的。

JobManager 和 TaskManagers 可以以不同的方式启动:

  • 作为独立(Standalone)集群的进程,直接在机器上启动

  • 在容器中启动

  • 由资源管理平台调度启动,比如 YARN、 K8S

    TaskManager启动之后,JobManager会与它建立连接,并将作业图(JobGraph)转换成可执行的执行图(ExecutionGraph)分发给可用的TaskManager,然后就由TashManager具体执行任务。

1 作业管理器(JobManager)

JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程,也就是说,每个应用都应该被唯一的JobManager所控制执行。当然,在高可用(HA)的场景下,可能会出现多个 JobManager;这时只有一个是正在运行的领导节点(leader),其他都是备用节点(standby)。

1.JobMaster

(Jobmanager有自己的通信系统去和TaskManager通信)

JobMaster是JobManager中最核心的组件,负责处理单独的作业(Job),所以JobMaster和具体的Job是一一对应的,多个Job可以同时运行在一个Flink集群中,每个Job都有一个自己的Jobmaster。

在作业提交时,JobMaster会接收到要执行的应用,这里说的“应用”一般是客户端提交来的。包括:jar包,数据流图(Dataflow graph),和作业图(JobGraph).

Jobmaster 会把JobGraph转换成一个物理层面的数据流图,这个图被叫做“执行图”(ExecutionGraph),它包含了所有可以并发执行的任务。JobMaster 会向资源管理器(ResourceManager)发出请求,申请执行任务必要的资源。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的 TaskManager 上 。

JobMater会负责所有需要中央协调的操作,比如检查点的协调

2.资源管理器(ResourceManager )

ResourceManager主要负责资源的管理与分配,在Flink集群中只有一个,所谓的资源主要指的是TaskManager的任务槽(task slot),任务槽就是Flink集群中的资源调度单元,包含了机器用来执行计算的一组Cpu和内存资源。每一个任务(task)都需要分配到一个slot上执行。

这里注意要把 Flink 内置的 ResourceManager 和其他资源管理平台(比如 YARN)的ResourceManager 区分开。Flink 的 ResourceManager,针对不同的环境和资源管理平台(比如 Standalone 部署,或者YARN),有不同的具体实现。在 Standalone 部署时,因为 TaskManager 是单独启动的(没有Per-Job 模式),所ResourceManager 只能分发可用 TaskManager 的任务槽,不能单独启动新TaskManager。 ​ 而在有资源管理平台时,就不受此限制。 当新的作业申请资源时, ResourceManager 会将有空闲槽位的 TaskManager 分配给 JobMaster。如果 ResourceManager 没有足够的任务槽,它还可以向资源提供平台发起会话,请求提供启动 TaskManager 进程的容器。另外,ResourceManager 还负责停掉空闲的 TaskManager,释放计算资源。

3.Dispatcher

Dispatcher 主要负责提供一个 REST 接口,用来提交应用,并且负责为每一个新提交的作业启动一个新的 JobMaster 组件。 Dispatcher 也会启动一个 Web UI,用来方便地展示和监控作业执行的信息。 Dispatcher 在架构中并不是必需的,在不同的部署模式下可能会被忽略掉。

2.任务管理器(TaskManager)

TaskManager是Flink中的工作进程,数据流的具体计算就是它做得,所以也被称为“worker”,Flink集群中必须至少有一个TaskManager,当然由于分布式计算的考虑,通常会有多个TaskManager运行,每个Taskmanager都包含一定数量的任务槽(task slots).slot是资源调度的最小单位,slot的数量限制了TaskManger能够并行处理的任务数量

启动之后,TaskManager会向资源管理器注册它的slots,收到资源管理器的指令后,Taskmanager就会将一个或多个槽位,提供给JobMaster调用,JobMaster就可以分配任务来执行了

在执行过程中, TaskManager 可以缓冲数据,还可以跟其他运行同一应用的 TaskManager交换数据。

一般情况下JobManager有一个,TaskManager有多个

你可能感兴趣的:(hadoop,大数据,分布式)