首页 > 编程语言 >DataX源码分析二:主体流程

DataX源码分析二:主体流程

时间:2022-12-07 11:11:36浏览次数:41  
标签:addOption String 流程 jobId job 源码 DataX configuration options

DataX的执行的入口方法是Engine::main方法,该方法中调用了Engine.entry(args)方法。

 1 public static void entry(final String[] args) throws Throwable {
 2         Options options = new Options();
 3         options.addOption("job", true, "Job config.");
 4         options.addOption("jobid", true, "Job unique id.");
 5         options.addOption("mode", true, "Job runtime mode.");
 6 
 7         BasicParser parser = new BasicParser();
 8         CommandLine cl = parser.parse(options, args);
 9 
10         String jobPath = cl.getOptionValue("job");
11 
12         // 如果用户没有明确指定jobid, 则 datax.py 会指定 jobid 默认值为-1
13         String jobIdString = cl.getOptionValue("jobid");
14         RUNTIME_MODE = cl.getOptionValue("mode");
15 
16         Configuration configuration = ConfigParser.parse(jobPath);
17         // 绑定i18n信息
18         MessageSource.init(configuration);
19         MessageSource.reloadResourceBundle(Configuration.class);
20 
21         long jobId;
22         if (!"-1".equalsIgnoreCase(jobIdString)) {
23             jobId = Long.parseLong(jobIdString);
24         } else {
25             // only for dsc & ds & datax 3 update
26             String dscJobUrlPatternString = "/instance/(\\d{1,})/config.xml";
27             String dsJobUrlPatternString = "/inner/job/(\\d{1,})/config";
28             String dsTaskGroupUrlPatternString = "/inner/job/(\\d{1,})/taskGroup/";
29             List<String> patternStringList = Arrays.asList(dscJobUrlPatternString,
30                     dsJobUrlPatternString, dsTaskGroupUrlPatternString);
31             jobId = parseJobIdFromUrl(patternStringList, jobPath); // 如果jobPath满足了上面的正则,则取出jobId。否则,jobId就是-1。
32         }
33 
34         boolean isStandAloneMode = "standalone".equalsIgnoreCase(RUNTIME_MODE);
35         if (!isStandAloneMode && jobId == -1) {
36             // 如果不是 standalone 模式,那么 jobId 一定不能为-1
37             throw DataXException.asDataXException(FrameworkErrorCode.CONFIG_ERROR, "非 standalone 模式必须在 URL 中提供有效的 jobId.");
38         }
39         configuration.set(CoreConstant.DATAX_CORE_CONTAINER_JOB_ID, jobId);
40 
41         //打印vmInfo
42         VMInfo vmInfo = VMInfo.getVmInfo();
43         if (vmInfo != null) {
44             LOG.info(vmInfo.toString());
45         }
46 
47         LOG.info("\n" + Engine.filterJobConfiguration(configuration) + "\n");
48 
49         LOG.debug(configuration.toJSON());
50 
51         ConfigurationValidate.doValidate(configuration); // 配置项检查。目前是空实现。
52         Engine engine = new Engine();
53         engine.start(configuration); // 启动执行引擎。
54     }

 

 

从该方法中可以看到主体流程(忽略i18n的处理):

 

 

 其中,解析命令行参数使用的是apache的Options、BasiParser与CommandLine三个类,仅少量代码,即完成了命令行参数解析:

    Options options = new Options();
options.addOption("job", true, "Job config.");
options.addOption("jobid", true, "Job unique id.");
options.addOption("mode", true, "Job runtime mode.");

BasicParser parser = new BasicParser();
CommandLine cl = parser.parse(options, args);

后续使用具体参数时,使用以下方式获取:

String jobPath = cl.getOptionValue("job");

上面代码即可获取到命令行中的-job xxxx选项及参数。在自已编写代码时,也可以使用这种方式,获取命令行参数。

后续将对配置获取、启动引擎进行具体说明。jobId的解析,与作业类型有关,后续进一步研究后再进行说明。

标签:addOption,String,流程,jobId,job,源码,DataX,configuration,options
From: https://www.cnblogs.com/xujq/p/16962527.html

相关文章

  • jetson nano调试指南1-源码下载
    1、本文使用jetpack4.3为例,可以使用此网站相应分支​​https://developer.nvidia.com/embedded/jetpack-archive​​2、点击进入下载代码页面​​https://developer.nvidia.......
  • 医疗类产品美国FDA注册流程
    什么是FDA?FDA由美国国会即联邦**授权,是专门从事食品与药品管理的最高执法机关。全称:食品药品监督管理局(FoodandDrugAdministration)严格来讲并没有FDA认证的叫法,这个FDA......
  • 【行业标准】 验收会议流程及问题总结
    1.时长:总时长1.3h,答辩大概30分钟2.参与人:汇报人相关人员、5名专家评审3.流程:报告人进行ppt答辩--信息中心(角色)介绍项目背景、目标、内容-【专家咨询(每个人)--答辩相关......
  • 安卓app源码和设计报告——简易记账本
    课程设计(实训)说明书题目实现简易记账本功能专业班级学生姓名同组学生指导老师课程设计(实训)评语学生姓名专业班级2题目实现简易记账本功能评语:成绩:优良中及格不及......
  • 安卓APP源码和设计报告——快递查询录入系统
    《多媒体通信技术》题目:快递完成日期 2022年05月目录1绪论12设计方案22.1设计思路和方案22.2功能要求22.3设计的流程图23设计过程33.1界面布局33.2功能实现34......
  • 安卓APP源码和设计报告——麻雀笔记
    目录一安卓应用程序开发背景31.1开发背景31.2开发环境4二安卓应用程序开发理论与方法4三记事本应用程序的设计与实现53.1拟解决的问题及目标53.2总体设计63.3详细设计......
  • ReentrantLock源码
    ReentrantLock即是AQS线程同步队列器思想的具体应用/实现实现了AQS,并有公平锁和非公平锁(默认非公平锁)两种实现 ReentrantLock有三个重要的内部类:Sync(抽象类),NonfaireS......
  • 很简单的源码剖析-SpringBoot内嵌Tomcat原理
    SpringBoot默认支持Tomcat,Jetty,和Undertow作为底层容器。而SpringBoot默认使用Tomcat,一旦引入spring-boot-starter-web模块,就默认使用Tomcat容器。<dependency><gr......
  • 使用Spring Reactor优化推荐流程
    1.背景公司有一个推荐系统Rec,这个系统的主要功能是:向外部系统提供推荐接口根据请求获取推荐策略根据推荐策略完成推荐的召回、过滤、打分、排序阶段Rec作为微服务......
  • pop_heap 源码剖析
    一:用法示例一共两个重载:default(1)   template<classRandomAccessIterator> voidpop_heap(RandomAccessIteratorfirst, RandomAccessIteratorlast);cu......