Apache Flink 进阶(一):Runtime 核心机制剖析( 七 )
3. 资源管理与作业调度
本节对 Flink 中资源管理与作业调度的功能进行更深入的说明 。 实际上 , 作业调度可以看做是对资源和任务进行匹配的过程 。 如上节所述 , 在 Flink 中 , 资源是通过 Slot 来表示的 , 每个 Slot 可以用来执行不同的 Task 。 而在另一端 , 任务即 Job 中实际的 Task , 它包含了待执行的用户逻辑 。 调度的主要目的就是为了给 Task 找到匹配的 Slot 。 逻辑上来说 , 每个 Slot 都应该有一个向量来描述它所能提供的各种资源的量 , 每个 Task 也需要相应的说明它所需要的各种资源的量 。 但是实际上在 1.9 之前 , Flink 是不支持细粒度的资源描述的 , 而是统一的认为每个 Slot 提供的资源和 Task 需要的资源都是相同的 。 从 1.9 开始 , Flink 开始增加对细粒度的资源匹配的支持的实现 , 但这部分功能目前仍在完善中 。
作业调度的基础是首先提供对资源的管理 , 因此我们首先来看下 Flink 中资源管理的实现 。 如上文所述 , Flink 中的资源是由 TaskExecutor 上的 Slot 来表示的 。 如图 4 所示 , 在 ResourceManager 中 , 有一个子组件叫做 SlotManager , 它维护了当前集群中所有 TaskExecutor 上的 Slot 的信息与状态 , 如该 Slot 在哪个 TaskExecutor 中 , 该 Slot 当前是否空闲等 。 当 JobManger 来为特定 Task 申请资源的时候 , 根据当前是 Per-job 还是 Session 模式 , ResourceManager 可能会去申请资源来启动新的 TaskExecutor 。 当 TaskExecutor 启动之后 , 它会通过服务发现找到当前活跃的 ResourceManager 并进行注册 。 在注册信息中 , 会包含该 TaskExecutor中所有 Slot 的信息 。 ResourceManager 收到注册信息后 , 其中的 SlotManager 就会记录下相应的 Slot 信息 。 当 JobManager 为某个 Task 来申请资源时 , SlotManager 就会从当前空闲的 Slot 中按一定规则选择一个空闲的 Slot 进行分配 。 当分配完成后 , 如第 2 节所述 , RM 会首先向 TaskManager 发送 RPC 要求将选定的 Slot 分配给特定的 JobManager 。 TaskManager 如果还没有执行过该 JobManager 的 Task 的话 , 它需要首先向相应的 JobManager 建立连接 , 然后发送提供 Slot 的 RPC 请求 。 在 JobManager 中 , 所有 Task 的请求会缓存到 SlotPool 中 。 当有 Slot 被提供之后 , SlotPool 会从缓存的请求中选择相应的请求并结束相应的请求过程 。
推荐阅读
- 第五人格|梦幻西游:担心的事发生了,大佬进阶110选错召唤兽,白花了2000块
- 盲僧|英雄联盟手游:打野玩家的进阶选择,盲僧,高机动性带来的直接收益
- 我的世界|剑网3药宗版本pve装备进阶路线,从大侠到新赛季毕业
- 盲僧|LOL手游盲僧是英雄代表?灵药再推进阶教学,双区王者的经验
- 进阶|永劫无间:胡桃只是奶妈?法神开发胡桃进阶打法,化身团战关键手
- 德鲁伊|魔兽怀旧服:TBC德鲁伊进阶宏,熊德无缝吃药,奶德一键迅捷治疗
- 进阶|梦幻西游:两次就进阶110灵性成功!难道中途的转折起了关键作用
- 进阶|梦幻西游手游:萌新的福利?新NPC开启测试,进阶不再问老玩家!
- 明日方舟|三国志战略版:冲桃园扫麒麟,虎臣弓进阶虎臣爆头骑指南
- 和平精英|和平精英核电站打法进阶教学,KS小雪吖提供详细攻略,吃鸡稳了