首页 > 其他分享 >大数据学习之Flink(二)

大数据学习之Flink(二)

时间:2022-11-30 17:14:44浏览次数:44  
标签:JobMaster Flink 作业 TaskManager 学习 提交 数据 资源管理

Flink运行架构

Flink 的运行时架构中,最重要的就是两大组件:作业管理器(JobManger)和任务管理器(TaskManager)。对于一个提交执行的作业,JobManager 是真正意义上的“管理者”(Master),负责管理调度,所以在不考虑高可用的情况下只能有一个;而 TaskManager 是“工作者”(Worker、Slave),负责执行任务处理数据,所以可以有一个或多个 作业提交和任务处理时的运行架构

 

JobManager和TaskManager的启动方式:

  作为独立集群的进程,直接在集群上使用

  在容器中使用

  有资源管理平台调度启动 

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

 

  作业管理器(JobManager)

  JobManager 是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的 JobManager 所控制执行

  JobManager的三大组件:

    1)JobMaster:是JobManager中最核心的组件,负责处理单独的作业,JobMaster和具体的job是一一对应的,多个job可以运行在一个flink集群中,每个job都有一个自己的JobMaster

    2)Resourcemanager资源管理器:主要负责资源的分配与管理,在flink中主要是指TaskManager的任务槽(flink集群资源调度单元 包含了CPU和内存资源)

    3)分发器(Dispatcher):主要负责提供一个rest接口,用来提交作业,并且负责为每一个新提交的作业启动一个新的JobMaster组件

  任务管理器(TaskManager)

    TaskManager 是 Flink 中的工作进程,负责数据流的具体计算任务(task)。Flink 集群中必须至少有一个 TaskManager;当然由于分布式计算的考虑,通常会有多个 TaskManager 运行,每一个 TaskManager 都包含了一定数量的任务槽(task slots)。Slot 是资源调度的最小单位,slots的数量限制了 TaskManager 能够并行处理的任务数量。

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

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

 

作业提交流程

Flink的提交流程随着部署模式和资源管理平台的不同会有不同的变化

  作业提交流程的具体步骤:

  (1)一般情况下,由客户端(App)通过分发器提供的REST接口,将作业提交给JobManager

  (2)由分发器启动 JobMaster,并将作业(包含 JobGraph)提交给 JobMaster。

  (3)JobMaster 将 JobGraph 解析为可执行的 ExecutionGraph,得到所需的资源数量,然后向资源管理器请求任务槽资源(slots)。
  (4)资源管理器判断当前是否由足够的可用资源;如果没有,启动新的 TaskManager。
  (5)TaskManager 启动之后,向 ResourceManager 注册自己的可用任务槽(slots)。
  (6)资源管理器通知 TaskManager 为新的作业提供 slots。
  (7)TaskManager 连接到对应的 JobMaster,提供 slots。
  (8)JobMaster 将需要执行的任务分发给 TaskManager。
  (9)TaskManager 执行任务,互相之间可以交换数据

 

  独立模式下的作业提交流程

   在独立模式(Standalone)下,只有会话模式和应用模式两种部署方式。两者整体来看流程是非常相似的:TaskManager 都需要手动启动,所以当 ResourceManager 收到 JobMaster 的请求时,会直接要求 TaskManager     提供资源。而 JobMaster 的启动时间点,会话模式是预先启动,应用模式则是在作业提交时启动

    

  YARN集群环境下作业的提交流程

  1)会话模式

    在会话模式需要先启动一个YARN-Session会话,这样会创建一个flink集群

      

    这里只启动了 JobManager,而 TaskManager 可以根据需要动态地启动。在 JobManager 内部,由于还没有提交作业,所以只有 ResourceManager 和 Dispatcher 在运行

    

 

    提交作业的流程

    

    (1)客户端通过 REST 接口,将作业提交给分发器。
    (2)分发器启动 JobMaster,并将作业(包含 JobGraph)提交给 JobMaster。
    (3)JobMaster 向资源管理器请求资源(slots)。
    (4)资源管理器向 YARN 的资源管理器请求 container 资源。
    (5)YARN 启动新的 TaskManager 容器。
    (6)TaskManager 启动之后,向 Flink 的资源管理器注册自己的可用任务槽。
    (7)资源管理器通知 TaskManager 为新的作业提供 slots。
    (8)TaskManager 连接到对应的 JobMaster,提供 slots。
    (9)JobMaster 将需要执行的任务分发给 TaskManager,执行任务

    

  单作业模式(per-job)

  在单作业模式下,Flink 集群不会预先启动,而是在提交作业时,才启动新的 JobManager

    

    (1)客户端将作业提交给 YARN 的资源管理器,这一步中会同时将 Flink 的 Jar 包和配置上传到 HDFS,以便后续启动 Flink 相关组件的容器。
    (2)YARN 的资源管理器分配容器(container)资源,启动 Flink JobManager,并将作业提交给 JobMaster。这里省略了 Dispatcher 组件。
    (3)JobMaster 向资源管理器请求资源(slots)。
    (4)资源管理器向 YARN 的资源管理器请求容器(container)。
    (5)YARN 启动新的 TaskManager 容器。
    (6)TaskManager 启动之后,向 Flink 的资源管理器注册自己的可用任务槽。
    (7)资源管理器通知 TaskManager 为新的作业提供 slots。
    (8)TaskManager 连接到对应的 JobMaster,提供 slots。
    (9)JobMaster 将需要执行的任务分发给 TaskManager,执行任务

  

  应用模式(application)

    应用模式与单作业模式的提交流程非常相似,只是初始提交给 YARN 资源管理器的不再是具体的作业,而是整个应用。一个应用中可能包含了多个作业,这些作业都将在 Flink 集群中启动各自对应的 JobMaster。

 

 

名词解释

  数据流图

    flink的程序由三部分组成:source、transformation、sink

    source表示源算子 负责读取数据源

    transformation表是转换算子,利用各种算子进行各种加工

    sink表示下沉算子 负责数据的输出

    flink程序运行时会被映射成所有算子按照逻辑顺序连接在一起的一张图 称为数据流图

  并行度

    把一个算子操作,“复制”多份到多个节点,数据来了之后就可以到其中任意一个执行。这样一来,一个算子操作就被拆分成了多个并行的“子任务”(subtasks),再将它们分发到不同节点,就真正实现了并行计算

    并行度的设置

    代码中:setParallelism(2)

    提交作业是设置:-p 2

    配置文件中:parallelism.default: 2

 

  作业图(JobGrape)、执行图(ExecutionGrape)

    flink运行时会将程序映射成数据流图 需要将数据流图进一步解析,转化为物理执行图

    数据流图-》作业图-》执行图-》物理图

 

 

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

标签:JobMaster,Flink,作业,TaskManager,学习,提交,数据,资源管理
From: https://www.cnblogs.com/lkd0910/p/16938541.html

相关文章

  • SOLIDWORKS 2023交互设计新功能——协作处理团队数据 简化繁琐操作
    我们即将迎来SOLIDWORKS2023新版本,按照往年惯例,SOLIDWORKS2023版本依旧是推出了10大新功能,作为达索正版代理商,微辰三维已经为大家详细解答了三个SOLIDWORKS2023新功能:​​......
  • 数据库 关系代数
    专门的关系运算:选择投影连接除二、传统的集合运算===================================================================1、符号1)R,t∈R,t[Ai]设......
  • go-micro v3学习
    go-micro是是Go微服务的框架。1.限流。2.日志中心。3.监控。TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugu......
  • linux迁移oracle数据库实例
    目录linux迁移oracle数据库实例1、expdp全库导出数据库实例1.1、选取实例1.2登录管理员用户,查询导出的目录文件,DIRECTORY1.3全库导出命令2、import导入库中创建新的实例,承......
  • 架构学习-记录003
                 ......
  • CAN总线学习
    一,CAN总线框架   ......
  • 数据链路层 _ 广播信道
    基本概念局域网(LAN)局域网(LAN)是指:由两个或两个以上相连的计算机组成,通常包含在较小地理区域内的网络。特点:网络为一个单位所拥有;地理范围和站点数目均有限。优......
  • Python学习(二):字符串常用函数有哪些?
    1.检验字符串长度:len(str);a="hellopython"len(a)12a="hellopython"len(a[::2])##从头取到尾,隔一个取值的长度6 2.切割字符串:obj.split(str);a="hell......
  • 数据库的Undo日志与Redo日志
    Undo日志主要用来恢复到事务开始前的状态更新前写入日志旧值commit之后,前面的日志还需要吗?分情况1.单线程可以清理2.多线程需要等到所有并行线程提交后才能(检查......
  • JAVA爬虫爬取网页数据数据库中,并且去除重复数据
    pom文件<!--添加Httpclient支持--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><versio......