1 组件
- 作业管理器(JobManager)、
- 资源管理器(ResourceManager)、
- 任务管理器(TaskManager)
- 分发器(Dispatcher)
2 YARN 两种模式
1Session-cluster 模式
Session-Cluster模式需要先启动集群,然后再提交作业,接着会向yarn申请一块空间后,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到yarn中的其中一个作业执行完成后,释放了资源,下个作业才会正常提交。所有作业共享Dispatcher和ResourceManager;共享资源;适合规模小执行时间短的作业。
在yarn中初始化一个flink集群,开辟指定的资源,以后提交任务都向这里提交。这个flink集群会常驻在yarn集群中,除非手工停止。
2Per-Job-Cluster 模式
一个Job会对应一个集群,每提交一个作业会根据自身的情况,都会单独向yarn申请资源,直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行。独享Dispatcher和ResourceManager,按需接受资源申请;适合规模大长时间运行的作业。
每次提交都会创建一个新的flink集群,任务之间互相独立,互不影响,方便管理。任务执行完成之后创建的集群也会消失。
3 四个运行时架构组件
1作业管理器(JobManager)
控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager所控制执行。
1 会接收应用程序包:作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有的类、库和其它资源的JAR包
2 把任务作业图JobGraph转换成物理层面的数据流图,所有可以并发执行的任务
3 想资源管理器请求任务必要的资源,
4 将执行图上的任务分配到对应的TaskManager上进行任务的协调
2 资源管理器
主要负责管理任务管理器(TaskManager)的插槽(slot),TaskManger插槽是Flink中定义的处理资源单元
1 面对JobManager的资源申请,将空闲的资源SLOT进行分配,不够可以启动TaskManager,进行资源的动态调整。
3 任务管理器
通常在Flink中会有多个TaskManager运行,每一个TaskManager都包含了一定数量的插槽(slots)
1 启动会向RS注册自己的SLOT
2 当JobManager获得资源申请时候,会把自己的SLOT资源提供给JOBM使用(分配任务)
4 分发器(Dispatcher)
将提交的应用移交给一个JobManager,也会启动一个WebUI,显示作业执行的信息
4任务提交流程
1 没有框架下任务提交流程

2 在YARN上部署,的提交流程

这里RS是在yarn上的RS,然而JobManager是在一台NodeManager上的AM里面
流程简述
1. Flink任务提交后,Client向HDFS上传Flink的Jar包和配置
2. 向Yarn ResourceManager提交任务,ResourceManager分配Container资源
3. 通知对应的NodeManager启动ApplicationMaster,ApplicationMaster启动后加载Flink的Jar包和配置构建环境,然后启动JobManager
4. ApplicationMaster向ResourceManager申请资源启动TaskManager
5. ResourceManager分配Container资源后,由ApplicationMaster通知资源所在节点的NodeManager启动TaskManager
6. NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager
7. TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。
TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行数据的传输
worker(TaskManager)都是一个JVM进程,其下面的SLOT任务共享JVM内存,减少task负载
Task Slot是静态的概念,是指TaskManager具有的并发执行能力,可以通过参数taskmanager.numberOfTaskSlots进行配置;而并行度parallelism是动态概念,即TaskManager运行程序时实际使用的并发能力,可以通过参数parallelism.default进行配置。
5 执行图
Task Slot是静态的概念,是指TaskManager具有的并发执行能力,可以通过参数taskmanager.numberOfTaskSlots进行配置;而并行度parallelism是动态概念,即TaskManager运行程序时实际使用的并发能力,可以通过参数parallelism.default进行配置。
StreamGraph -> JobGraph-> ExecutionGraph -> 物理执行图。
数据流图,工作图,执行图,物理执行图
1 JobGraph是优化数据流图,(将多个可以连结的节点连在一起,减少数据的序列化操作的消耗)
2 ExecutionGraph :是JobGraph的并行化版本,是调度层最核心的数据结构。
3 物理执行图: 是JOB进行调度后,在TaskManager形成的一种执行图的概念,并不是一种数据结构

6 并行度
一个特定算子的子任务(subtask)的个数被称之为其并行度(parallelism)。
Stream在算子之间传输数据的形式可以是
- one-to-one(forwarding)的模式
- 也可以是redistributing的模式,具体是哪一种形式,取决于算子的种类。
区别就是算子数据是否进行重新分区
1735

被折叠的 条评论
为什么被折叠?



