这篇文章主要介绍从命令行到任务在Driver端运行的过程

通过flink run 命令提交jar包运行程序

以yarn 模式提交任务命令类似于: flink run -m yarn-cluster XXX.jar

先来看一下脚本中的调用类

在flink.sh脚本中可以看到提交的命令走到了这样一个外观类上,用于提交job解析用户命令行参数

在其main方法中

先会解析对应需要的flink参数包括flink-conf-dir等,接着

1处会根据是否有hadoop权限安全控制走对应的doas(),具体的执行逻辑为2处解析对应的用户参数

拿到参数后会先将参数中的第一个先取出来作为action

这里我们只看job提交的,解析出来也就是run,然后将剩余的参数用于job运行

在job运行前会先解析剩余的参数,比如运行的jar文件地址,运行的主类名(没有后面回去Manifest里面找)作为entryPoint入口,并行度等参数

接着

就用得到的这些参数构建program了,这里其实就是拿到了入口运行类的全额限定名,然后通过类加载器加载运行主类

接着,会根据运行时用户的主类是否为Program的实现类(用户可以直接返回plan)来设置对应的packageProgram的属性program是否为空

那我们常规的提交main方法主类的这里就是空的,如果是主类实现progarm的就反射实例化了一个以后赋给它

接着,就是运行并且提交任务了

 

这里比较重要,yarn模式提交的话这里会调度整个集群,提交常见的异常

Couldn't deploy Yarn session cluster

就是从这个方法里面抛出的,与yarn有关

这里只看yarn的调度集群,因为standalone模式的话Jobmanager和TaskManager是已经启动好的了不需要这里

其中走到了这个方法deployInternal()

可以看到这里就是申请AppMaster并且传入了yarn模式启动集群的类的全额限定名,其实就是这个类

用于启动jobmanager,和standalone 的入口类 

org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint  

功能差不多,但是还有有区别,当这个yarnsourceManager类申请到contain的时候就会

就会去起对应的taskManager了

回到最开始,当集群调度完以后

运行用户程序

其实就是调用了用户的main方法,结束

后面就是job往jobmanager提交了,前面的文章有

总结:

  通过一个外观类解析用户参数,拿到类名

  调度集群启动申请AppMaster,Contaion起JM,TM

  然后类名通过类加载器加载类,然后反射实例调用用户的main方法启动Job

Flink命令行提交job (源码分析)的更多相关文章

  1. MapReduce之提交job源码分析 FileInputFormat源码解析

    MapReduce之提交job源码分析 job 提交流程源码详解 //runner 类中提交job waitForCompletion() submit(); // 1 建立连接 connect(); ...

  2. github命令行下载项目源码

    一.git clone [URL] 下载指定ur的源码 $ git clone https://github.com/jquery/jquery 二.指定参数, -b是分支, --depth 1 最新 ...

  3. 2d命令行小游戏源码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. MapReduce——客户端提交任务源码分析

    计算向数据移动 MR程序并不会在客户端执行任何的计算操作,它是为计算工作做好准备,例如计算出切片信息,直接影响到Map任务的并行度. 在Driver中提交任务时,会写到这样的语句: boolean r ...

  5. [源码分析] 从源码入手看 Flink Watermark 之传播过程

    [源码分析] 从源码入手看 Flink Watermark 之传播过程 0x00 摘要 本文将通过源码分析,带领大家熟悉Flink Watermark 之传播过程,顺便也可以对Flink整体逻辑有一个 ...

  6. [源码分析]从"UDF不应有状态" 切入来剖析Flink SQL代码生成 (修订版)

    [源码分析]从"UDF不应有状态" 切入来剖析Flink SQL代码生成 (修订版) 目录 [源码分析]从"UDF不应有状态" 切入来剖析Flink SQL代码 ...

  7. OpenHarmony移植案例: build lite源码分析之hb命令__entry__.py

    摘要:本文介绍了build lite 轻量级编译构建系统hb命令的源码,主要分析了_\entry__.py文件. 本文分享自华为云社区<移植案例与原理 - build lite源码分析 之 hb ...

  8. solr源码分析之solrclound

    一.简介 SolrCloud是Solr4.0版本以后基于Solr和Zookeeper的分布式搜索方案.SolrCloud是Solr的基于Zookeeper一种部署方式.Solr可以以多种方式部署,例如 ...

  9. Flink源码分析 - 源码构建

    原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483692&idx=1&sn=18cddc1ee ...

随机推荐

  1. C#.NET中的ToString()数字格式化

    数字格式字符串-----货币-----.ToString("C");.ToString("c");例 2.5.ToString("c") - ...

  2. mysql 视图 事务 索引

    为什么需要有视图 * 对于复杂的查询,往往是有多个数据表进行关联查询而得到,而这种语句往往比较复杂,也可能非常频繁的使用. 比如这样的SQL语句 select goods.name,goods_cat ...

  3. Django中间件-跨站请求伪造-django请求生命周期-Auth模块-seettings实现可插拔配置(设计思想)

    Django中间件 一.什么是中间件 django中间件就是类似于django的保安;请求来的时候需要先经过中间件,才能到达django后端(url,views,models,templates), ...

  4. soupUI解决md5加密签名,cookie传递

    问题详情: 1.接口调用需要前提状态:登录状态(cookie) 2.接口请求需要签名,签名规则为:MD5(TokenKey+apikey+timestamp+nonc) 其中 1.TokenKey.a ...

  5. crm项目-业务实现

    ###############  crm业务    ############### """ 校区管理,部门管理,课程管理, 这三个都比较简单 1,只需要展示校区名称,这是 ...

  6. The Maximum Unreachable Node Set

    题目描述 In this problem, we would like to talk about unreachable sets of a directed acyclic graph G = ( ...

  7. Python之循环条件、变量、字符串格式化

    一.认识python python语言的优缺点,自行百度,这里不概述,简单说下,python是一门面向对象,解释型计算机语言.那么问题来了,解释型和编译型语言有什么区别? 1.解释型和编译型语言区别 ...

  8. Spring+Mybais整合

    简单的来说,Spring主要用于在业务层(当然spring也有数据库交互的模块,个人觉得spring在这方面有一点不如mybatis),而mybatis主要用于数据持久化,在一个完整的项目中无论是业务 ...

  9. [LC] 252. Meeting Rooms

    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...

  10. hadoop集群搭建(docker)

    背景 目前在一家快递公司工作,因项目需要,对大数据平台做个深入的了解.工欲利其器必先利其器,在网上找了许多教程,然后自己搭建一个本地的环境并记录下来,增加一些印象. 环境搭建 1)Ubuntu doc ...