Flink1.15源码解析--启动TaskManager
创始人
2024-01-29 03:26:29

文章目录

  • 一、前言
  • 二、TaskManagerRunner
    • 2.1、TaskManagerRunner
      • 2.1.1、创建 TaskManagerRunner
        • 2.1.1.1、创建 TaskExecutorService, 用于创建 TaskExecutor

一、前言

TaskManager(也称为 worker)执行作业流的 task,并且缓存和交换数据流

必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。请注意一个 task slot 中可以执行多个算子

二、TaskManagerRunner

从 taskmanager.sh 脚本我们 知道 taskmanager的启动类是 org.apache.flink.runtime.taskexecutor.TaskManagerRunner

2.1、TaskManagerRunner

入口 main(), 前几行是检验参数,日志记录,然后调用 runTaskManagerProcessSecurely

    public static void main(String[] args) throws Exception {// startup checks and loggingEnvironmentInformation.logEnvironmentInfo(LOG, "TaskManager", args);SignalHandler.register(LOG);JvmShutdownSafeguard.installAsShutdownHook(LOG);long maxOpenFileHandles = EnvironmentInformation.getOpenFileHandlesLimit();if (maxOpenFileHandles != -1L) {LOG.info("Maximum number of open file descriptors is {}.", maxOpenFileHandles);} else {LOG.info("Cannot determine the maximum number of open file descriptors");}runTaskManagerProcessSecurely(args);}

接下来我们查看 runTaskManagerProcessSecurely 方法, 就是加载 flink 的配置文件 flink-config.yaml.

    public static void runTaskManagerProcessSecurely(String[] args) {Configuration configuration = null;try {configuration = loadConfiguration(args);} catch (FlinkParseException fpe) {LOG.error("Could not load the configuration.", fpe);System.exit(FAILURE_EXIT_CODE);}runTaskManagerProcessSecurely(checkNotNull(configuration));}

然后将解析完的配置传入 runTaskManagerProcessSecurely

    public static void runTaskManagerProcessSecurely(Configuration configuration) {// 加载配置FlinkSecurityManager.setFromConfiguration(configuration);// 启动插件管理器final PluginManager pluginManager =PluginUtils.createPluginManagerFromRootFolder(configuration);FileSystem.initialize(configuration, pluginManager);StateChangelogStorageLoader.initialize(pluginManager);int exitCode;Throwable throwable = null;ClusterEntrypointUtils.configureUncaughtExceptionHandler(configuration);try {// 这个地方我们见了很多次,组件启动,都是通过 SecurityUtils// 安装 安全模块SecurityUtils.install(new SecurityConfiguration(configuration));// 通过安全上下文 启动 taskManagerexitCode =SecurityUtils.getInstalledContext().runSecured(() -> runTaskManager(configuration, pluginManager));} catch (Throwable t) {throwable = ExceptionUtils.stripException(t, UndeclaredThrowableException.class);exitCode = FAILURE_EXIT_CODE;}if (throwable != null) {LOG.error("Terminating TaskManagerRunner with exit code {}.", exitCode, throwable);} else {LOG.info("Terminating TaskManagerRunner with exit code {}.", exitCode);}System.exit(exitCode);}

runTaskManager 通过名字我们不难看出,离TaskManager的构建越来越近了。我们点进runTaskManager方法:

public static int runTaskManager(Configuration configuration, PluginManager pluginManager)throws Exception {final TaskManagerRunner taskManagerRunner;try {// 创建 TaskManagerRunnertaskManagerRunner =new TaskManagerRunner(configuration,pluginManager,TaskManagerRunner::createTaskExecutorService); // 创建 TaskManagerRunner 相关服务// 启动 TaskManagerRunnertaskManagerRunner.start();} catch (Exception exception) {throw new FlinkException("Failed to start the TaskManagerRunner.", exception);}// 返回结果码try {return taskManagerRunner.getTerminationFuture().get().getExitCode();} catch (Throwable t) {throw new FlinkException("Unexpected failure during runtime of TaskManagerRunner.",ExceptionUtils.stripExecutionException(t));}}

在这个方法里做了两件事:

  • 1、构建了一个TaskManagerRunner

  • 2、启动TaskManagerRunner

    • 基础服务初始化

实际上,TaskManager启动的所有准备工作,都是在这个TaskManagerRunner中完成的。

2.1.1、创建 TaskManagerRunner

            // 创建 TaskManagerRunnertaskManagerRunner =new TaskManagerRunner(configuration,pluginManager,TaskManagerRunner::createTaskExecutorService); // 创建 TaskManagerRunner 相关服务

2.1.1.1、创建 TaskExecutorService, 用于创建 TaskExecutor

TaskManagerRunner::createTaskExecutorServicepublic static TaskExecutorService createTaskExecutorService(Configuration configuration,ResourceID resourceID,RpcService rpcService,HighAvailabilityServices highAvailabilityServices,HeartbeatServices heartbeatServices,MetricRegistry metricRegistry,BlobCacheService blobCacheService,boolean localCommunicationOnly,ExternalResourceInfoProvider externalResourceInfoProvider,WorkingDirectory workingDirectory,FatalErrorHandler fatalErrorHandler)throws Exception {// 构建  TaskExecutorfinal TaskExecutor taskExecutor =startTaskManager(configuration,resourceID,rpcService,highAvailabilityServices,heartbeatServices,metricRegistry,blobCacheService,localCommunicationOnly,externalResourceInfoProvider,workingDirectory,fatalErrorHandler);return TaskExecutorToServiceAdapter.createFor(taskExecutor);}

返回Flink1.15源码解析-总目录

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
平遥古城在哪 平遥古城基本现状 城垣恢宏,雉堞连云市井街巷,店肆林立四合院落,青砖瓦屋这里是平遥古城历经千年沧桑而古朴宛然,风姿依旧...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
平遥古城在哪 平遥古城基本现状 城垣恢宏,雉堞连云市井街巷,店肆林立四合院落,青砖瓦屋这里是平遥古城历经千年沧桑而古朴宛然,风姿依旧...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...