IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Flink源码解析(三)TaskManager启动分析 -> 正文阅读

[大数据]Flink源码解析(三)TaskManager启动分析

1、Flink主节点TaskManager启动分析:

????????TaskManager是Flink的worker节点,它负责Flink中本机slot资源的管理以及具体task的执行。
????????TaskManager上的基本资源单位是slot,一个作业的task最终会部署在一个TM的slot上运行,TM会负责维护本地的slot资源列表,并来与FlinkMaster和JobManager通信。
????????根据前面的启动分析:TaskManager的启动主类:TaskManagerRunner。

2、源码分析

代码执行的大致流程如下:

TaskManagerRunner.main()
?? ?runTaskManagerSecurely(args, ResourceID.generate());
?? ??? ?# 加载配置
?? ??? ?Configuration configuration = loadConfiguration(args);
?? ??? ?# 启动 TaskManager
?? ??? ?runTaskManagerSecurely(configuration, resourceID);
?? ??? ??? ?# 启动 TaskManager
?? ??? ??? ?runTaskManager(configuration, resourceID, pluginManager);
?? ??? ??? ??? ?# 构建 TaskManagerRunner 实例
?? ??? ??? ??? ?taskManagerRunner = new TaskManagerRunner(...);
?? ??? ??? ??? ??? ?# 初始化一个线程池
?? ??? ??? ??? ??? ?this.executor = Executors.newScheduledThreadPool(....)
?? ??? ??? ??? ??? ?# 获取高可用模式
?? ??? ??? ??? ??? ?highAvailabilityServices = HighAvailabilityServicesUtils.createHighAvailabilityServices(...)
?? ??? ??? ??? ??? ?# 创建 RPC 服务
?? ??? ??? ??? ??? ?rpcService = createRpcService(configuration,
?? ??? ??? ??? ??? ?highAvailabilityServices);
?? ??? ??? ??? ??? ?# 创建心跳服务
?? ??? ??? ??? ??? ?heartbeatServices = HeartbeatServices.fromConfiguration(conf);
?? ??? ??? ??? ??? ?# 创建 BlobCacheService
?? ??? ??? ??? ??? ?blobCacheService = new BlobCacheService(....)
?? ??? ??? ??? ??? ?# 创建 TaskManager
?? ??? ??? ??? ??? ?taskManager = startTaskManager(.....)
?? ??? ??? ??? ??? ?# 初始化 TaskManagerServices
?? ??? ??? ??? ??? ?taskManagerServices = TaskManagerServices.fromConfiguration(...)
?? ??? ??? ??? ??? ?# 初始化 TaskEventDispatcher
?? ??? ??? ??? ??? ?taskEventDispatcher = new TaskEventDispatcher();
?? ??? ??? ??? ??? ?# 初始化 IOManagerASync
?? ??? ??? ??? ??? ?ioManager = new IOManagerAsync(...)
?? ??? ??? ??? ??? ?# 初始化 NettyShuffleEnvironment
?? ??? ??? ??? ??? ?shuffleEnvironment = createShuffleEnvironment(...)
?? ??? ??? ??? ??? ?# 初始化 KVStageService
?? ??? ??? ??? ??? ?kvStateService =
?? ??? ??? ??? ??? ?KvStateService.fromConfiguration(...)
?? ??? ??? ??? ??? ?# 初始化 BroadCastVariableManager
?? ??? ??? ??? ??? ?broadcastVariableManager = new BroadcastVariableManager();
?? ??? ??? ??? ??? ?# 初始化 TaskSlotTable
?? ??? ??? ??? ??? ?taskSlotTable = createTaskSlotTable(...)
?? ??? ??? ??? ??? ?# 初始化 DefaultJobTable
?? ??? ??? ??? ??? ?jobTable = DefaultJobTable.create();
?? ??? ??? ??? ??? ?# 初始化 JobLeaderService
?? ??? ??? ??? ??? ?jobLeaderService = new DefaultJobLeaderService(....)
?? ??? ??? ??? ??? ?# 初始化 TaskStateManager
?? ??? ??? ??? ??? ?taskStateManager = new TaskExecutorLocalStateStoresManager()
?? ??? ??? ??? ??? ?# 初始化 LibraryCacheManager
?? ??? ??? ??? ??? ?libraryCacheManager = new BlobLibraryCacheManager()
?? ??? ??? ??? ??? ?# 返回
?? ??? ??? ??? ??? ?return new TaskManagerServices(....)
?? ??? ??? ??? ?# 初始化一个 TaskExecutor
?? ??? ??? ??? ?return new TaskExecutor(.....)
?? ??? ??? ??? ??? ?# 初始化心跳管理器:jobManagerHeartbeatManager
?? ??? ??? ??? ??? ?this.jobManagerHeartbeatManager = createJobManagerHeartbeatManager(heartbeatServices,resourceId);
?? ??? ??? ??? ??? ?# 初始化心跳管理器:resourceManagerHeartbeatManager
?? ??? ??? ??? ??? ?this.resourceManagerHeartbeatManager = createResourceManagerHeartbeatManager(heartbeatServices,resourceId);
?? ??? ??? ??? ??? ?# 转到 TaskExecutor 的 onStart() 方法
?? ??? ??? ??? ??? ?TaskExecutor.onStart();
?? ??? ??? ??? ??? ??? ?startTaskExecutorServices();
?? ??? ?# 启动 TaskManagerRunner
?? ??? ?taskManagerRunner.start();

?TaskManagerRunner的启动大致分为三类比较重要的:

  • 一些基础服务
  • TaskManagerService
  • TaskExecutor

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:34:51  更:2021-08-01 14:37:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 6:04:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码