首页 > 编程语言 >Flink源码学习(4) TaskManager从节点启动分析

Flink源码学习(4) TaskManager从节点启动分析

时间:2024-04-11 23:45:09浏览次数:18  
标签:slot 启动 Flink TaskManager 源码 TaskExecutor 节点

taskManager是flink的worker节点,负责slot的资源管理和task执行 一个taskManager就是一台服务器的抽象 TaskManager基本资源单位是slot,一个作业的task会部署在一个TM的slot上运行,TM会负责维护本地的slot资源列表,并与Master和JobManager进行通信 启动主类:TaskManagerRunner TaskManagerRunner.main() 启动函数:runTaskManagerProcessSecurely(args); Flink集群主节点和从节点,每个节点都有一个全局的唯一ID,叫ResourceID

  1. load解析main方法参数和flink-conf.yaml配置信息
  2. runTaskManagerProcessSecurely
      1. 在主节点启动的时候启动了PluginManager
      2. 然后再runTaskManager里面通过线程来启动TaskManager
        SecurityUtils.getInstalledContext()
                .runSecured(() -> runTaskManager(configuration, pluginManager));

         

      3. 构建tm实例,taskManagerRunner是standalone下TaskManager的可执行入口点。构造相关组件(network,IO,memoryManager,RPCService等)并启动
        1. New TaskManagerRunner初始化各种基础服务组件
          1. 初始化各种组件
          2. WebMonitorEndpoint
          3. Dispatcher
          4. resourceManager
        2. start方法是发送一个start消息确认启动

      TaskManager启动分三件事

        1.   启动基础服务

          1. 启动7大基础服务
        1.   初始化taskManagerService

          1. startTaskManager
              启动中启动了很多服务,同时也启动了TaskExecutor
          1. 线程池,处理回调
          1. Flink中大量的异步编程
          2. CompletableFeature大量提交请求的执行和回调的执行都是由线程池执行
          3. feature.xxx(()->xxx(),executor)
          4. 定时的线程池(NewScheduledThreadPool):创建一个线程池,它可安排在延迟时间后运行命令或者定期地执行
          1. HA高可用服务,用zookeeper来做,在flink-conf.yaml中配置high-availability = zookeeper模式
            highAvailabilityServices =
                    HighAvailabilityServicesUtils.createHighAvailabilityServices(
                            configuration,
                            executor,
                            AddressResolution.NO_ADDRESS_RESOLUTION,
                            rpcSystem,
                            this);

             

          2. createRpcService
            1. createAndStart初始化actor System
            2. 使用了代理模式
              1. 代理模式是一种结构型设计模式,它允许一个对象代表另一个对象,从而控制对这个对象的访问。在Flink的RPC服务中,代理模式被用于创建远程调用的代理对象,以便在客户端和服务器之间进行通信。
              2. 具体来说,在Flink的RPC框架中,RpcService负责创建和启动RpcEndpoint组件的RpcServer,并且提供了与远程RpcServer建立连接的能力。当调用RpcService的connect方法时,它会创建一个代理对象,这个代理对象实现了RpcGateway接口,用于与远程的RpcEndpoint进行通信。
              3. 当一个TaskManager需要与ResourceManager通信时,它会通过RpcService创建一个连接。RpcService会使用Akka框架创建一个ActorRef,然后通过这个ActorRef创建一个AkkaInvocationHandler或者FencedAkkaInvocationHandler。这个InvocationHandler会被用来创建一个RpcGateway的代理对象,该代理对象可以在本地代表远程的RpcEndpoint
          3. heartbeat服务
            1. taskExecutor心跳组件启动,跟resourceManager维持心跳
            2. jobMaster心跳组件启动,跟resourceManager维持心跳
            3. interval=10s并且timeout=50s,也就是连续5次心跳没有就挂了,在flink-conf.yaml设置
          4. metrics监控服务
          5. Blob资源删除服务:两个定时任务,定时检查,删除过期的job资源文件,通过引用计数法来判断文件是否过期
            1. 主节点启动BlobServer
            2. 从节点启动BlobCacheService
      1. 在startTaskManager的最后,初始化TaskExecutor
        1. Task资源
          final TaskExecutorResourceSpec taskExecutorResourceSpec =
                  TaskExecutorResourceUtils.resourceSpecFromConfig(configuration);
        2. 1台物理节点的资源:cpu,memory。network
      2. taskManagerService
          1. 初始化了很多的taskManager要运行过程中需要的服务,真正需要的用来对外提供服务的组件
        TaskManagerServices taskManagerServices =
                TaskManagerServices.fromConfiguration(
                        taskManagerServicesConfiguration,
                        taskExecutorBlobService.getPermanentBlobService(),
                        taskManagerMetricGroup.f1,
                        ioExecutor,
                        fatalErrorHandler,
                        workingDirectory);

         

        1. 里面有个shuffleEnvironment,上下游StreamTask有shuffle动作,在过程中,许哟啊很组件工作,这个组件为shuffle提供创建组件的环境支持
        2. TaskSlotTable<Task> taskSlotTable
          1. 哪些task在哪些slot里执行,使用table关联
          2. 当一个slot被调度执行了一个task,就会生成taskslot对象
          3. 一个task是由一个线程执行
        3. Flink:resourceManager+taskManager(slot管理+task执行)
      3. 方法返回TaskExecutor,初始化taskManager最重要的目标就是启动taskExecutor
        return new TaskExecutor(
                rpcService,
                taskManagerConfiguration,
                highAvailabilityServices,
                taskManagerServices,
                externalResourceInfoProvider,
                heartbeatServices,
                taskManagerMetricGroup.f0,
                metricQueryServiceAddress,
                taskExecutorBlobService,
                fatalErrorHandler,
                new TaskExecutorPartitionTrackerImpl(taskManagerServices.getShuffleEnvironment()),
                delegationTokenReceiverRepository);

         

      4. 额外
    Flink集群主从架构:JobManager,TaskManager ResourceManager(心跳,线程池)+taskExecutor(slot管理,task执行) 不管是主节点JobManager还是从节点TaskManager除了关于资源管理和调度意外,还需要其他的服务 JobManager是逻辑概念上的主节点,实际上类叫clusterEntryPoint,然后具体叫JobMaster

Standalone

1个Yarn Container JobManager 启动ResourceManager 启动Dispatcher 其他的 Yarn Container TaskExecutor 应用程序提交的时候,启动一个JobMaster,再去调度StreamTask执行,向JobMaster汇报心跳 Dispatcher调度一个JobMaster,

 

  1. TaskManager/TaskExecutor注册和心跳

总结:taskManager是一个逻辑抽象,代表一台服务器,启动必然会包含一些服务,另外包含一个TaskExecutor存在于内部,真实ide帮助Task Manager完成各种核心操作:
  1. 提交task
  2. 申请和释放slot
创建TaskManager实际上返回的是TaskExecutor TaskExecutor本身是RpcEndpoint的子类
  1. TaskExecutor的初始化:
    1. 初始化2个心跳管理器,jobManagerHeartbeat resourceManagerHeartbeat
    2. hardware Description把硬件资源抽象成一个对象
      this.hardwareDescription =
              HardwareDescription.extractFromSystem(taskExecutorServices.getManagedMemorySize());

       

  2. onStart方法
    1. 继承的RpcEndpoint,所以需要执行
    2. 启动taskExecutorService
      1. 监控ResourceManager
        1. 连接ResourceManager
        2. 注册
        3. 维持心跳
        4. 当前TaskExecutor会监控RM的变更
      2. 启动TaskSlotTable服务
      3. 监控JobMaster
      4. 启动FileCache

标签:slot,启动,Flink,TaskManager,源码,TaskExecutor,节点
From: https://www.cnblogs.com/ak918xp/p/18130269

相关文章

  • 基于dremio 安装包进行源码依赖包maven 私服重建的一个思路
    dremio25.0版本已经发布了,但是如果希望自己源码构建,但是缺少一些依赖造成编译会有问题,但是我们可以直接基于官方提供的下载包的文件进行maven私服的重建,以下说明下简单流程参考流程下载软件包这个可以从dremio官网下载到最好选择一个可以构建的分支本地构建下此步......
  • python计算机毕设【附源码】养老院管理系统(django+mysql+论文)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着社会的快速发展,人口老龄化问题日益凸显。养老院作为为老年人提供居住、医疗、康复、娱乐等综合服务的场所,其管理水平和服务质量对老年人的生活质量有着......
  • java+saas模式医院云HIS系统源码Java+Spring+MySQL + MyCat融合BS版电子病历系统,支持
    java+saas模式医院云HIS系统源码Java+Spring+MySQL+MyCat融合BS版电子病历系统,支持电子病历四级云HIS系统是一款满足基层医院各类业务需要的健康云产品。该产品能帮助基层医院完成日常各类业务,提供病患预约挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医......
  • Dubbo源码解读-Consumer消费端@Reference服务端引用流程
    上篇我们介绍了Provider端监听注册中心动态配置原理,地址如下Dubbo源码解析-Provider端监听注册中心动态配置原理-CSDN博客    本文主要针Dubbo消费端@Reference服务端引用流程原理,从dubbo源码角度进行解析。    大家可以好好仔细读一下本文。有疑问欢迎留言......
  • 青否科技为什么要开发数字人直播源码!
    直播作为一种新的电商形态,电商直播化与直播电商化的现象已经逐渐普遍。数字人从去年双11作为集团十大黑科技正式公开亮相,该产品从以前的窗口式问答,升级为直播间的多维度互动,技术不断在进步!我们知道去年双11它最大的变化来自于一天变成了两个时段。同时,直播带货的GMV在整个电商场......
  • 【附源码】JAVA计算机毕业设计小型家政服务管理系统的设计与实现(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着社会的快速发展和人们生活节奏的加快,家政服务行业应运而生,并迅速发展壮大。越来越多的家庭开始聘请家政人员来帮助处理家庭日常事务,如清洁、烹饪、......
  • java计算机毕业设计基于微信小程序的书籍销售系统【附源码+远程部署+程序+mysql】
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着移动互联网技术的飞速发展,智能手机用户数量急剧增加,人们获取信息和进行日常交易的方式正逐步向移动端转移。微信作为中国最流行的社交通讯软件,其推出......
  • 企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管
     工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理   工程项目各模块及其功能点清单一、系统管理    1、数据字典:实现对数据字典标签的增删改查操......
  • 社交圈子系统,包含Uni前端源码 ,App+H5+小程序 ,后端thinkphp源码+商业版
    系统介绍系统基于TP6+Uni-app框架开发;客户移动端采用uni-app开发,管理后台TH6开发。系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步,可快速打包生成APP;我们为你准备了完善的后台管理,不需要你懂PHP,按照教程10分钟安装完即可使用,堪比深夜的杜蕾斯还方便。......
  • 最火短剧在线搜索神器源码
    源码简介搜索神器源码,自带本地数据库500+数据,共有6000+短剧视频,与短剧猫一样。搭建环境PHP7.3Mysql5.6安装教程1.上传源码到网站目录中2.修改【admin.php】中,$username=‘后台登录账号’;$password=‘后台登录账号密码’;后台登录地址http://你的域名/admin.p......