一、根据前面python文件知道,java的main函数是com.alibaba.datax.core.Engine

  public static void main(String[] args) throws Exception {int exitCode = 0;try {Engine.entry(args);} catch (Throwable e) {exitCode = 1;String trace = ExceptionTracker.trace(e);String errDesc = "未知datax错误,参考堆栈内容分析。";LOG.error("\n\n经DataX智能分析,该任务最可能的错误原因是:\n" + trace);if (e instanceof DataXException) {DataXException tempException = (DataXException) e;ErrorCode errorCode = tempException.getErrorCode();errDesc = errorCode.getDescription();if (errorCode instanceof FrameworkErrorCode) {FrameworkErrorCode tempErrorCode = (FrameworkErrorCode) errorCode;exitCode = tempErrorCode.toExitValue();}}System.exit(exitCode);}System.exit(exitCode);
}

main函数主要catch了一下异常,并将异常信息打印出来,实际执行在entry函数中

  public static void entry(final String[] args) throws Throwable {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");// 如果用户没有明确指定jobid, 则 datax.py 会指定 jobid 默认值为-1String jobIdString = cl.getOptionValue("jobid");RUNTIME_MODE = cl.getOptionValue("mode");Configuration configuration = ConfigParser.parse(jobPath);long jobId;if (!"-1".equalsIgnoreCase(jobIdString)) {jobId = Long.parseLong(jobIdString);} else {// only for dsc & ds & datax 3 updateString dscJobUrlPatternString = "/instance/(\\d{1,})/config.xml";String dsJobUrlPatternString = "/inner/job/(\\d{1,})/config";String dsTaskGroupUrlPatternString = "/inner/job/(\\d{1,})/taskGroup/";List<String> patternStringList = Arrays.asList(dscJobUrlPatternString,dsJobUrlPatternString, dsTaskGroupUrlPatternString);jobId = parseJobIdFromUrl(patternStringList, jobPath);}boolean isStandAloneMode = "standalone".equalsIgnoreCase(RUNTIME_MODE);if (!isStandAloneMode && jobId == -1) {// 如果不是 standalone 模式,那么 jobId 一定不能为-1throw DataXException.asDataXException(FrameworkErrorCode.CONFIG_ERROR, "非 standalone 模式必须在 URL 中提供有效的 jobId.");}configuration.set(CoreConstant.DATAX_CORE_CONTAINER_JOB_ID, jobId);//打印vmInfoVMInfo vmInfo = VMInfo.getVmInfo();if (vmInfo != null) {LOG.info(vmInfo.toString());}LOG.info("\n" + Engine.filterJobConfiguration(configuration) + "\n");LOG.debug(configuration.toJSON());ConfigurationValidate.doValidate(configuration);Engine engine = new Engine();engine.start(configuration);
}

entry函数主要功能:

1、解析了java命令行的三个参数,分别是job、jobid和mode,其中job是用户配置的json文件路径,jobid和mode是python文件带进来的,单机模式下可以忽略改参数
2、读取用户配置的json文件,转化为内部的configuration配置
3、打印相关信息,并校验json文件的合法性
4、启动engine执行

entry执行完毕之后,进入start函数,关键代码如下:

 public void start(Configuration allConf) {// 绑定column转换信息ColumnCast.bind(allConf);/*** 初始化PluginLoader,可以获取各种插件配置*/LoadUtil.bind(allConf);*************container = new JobContainer(allConf);*************container.start();
}

start函数中主要包括:

1、列转换默认值,即动态在configuration中注入默认值
2、初始化插件的LoadUtil,后面classLoader相关操作都会依赖这个函数
3、初始化JobContainer并启动

datax源码阅读二:Engine流程相关推荐

  1. mybatis源码阅读(二):mybatis初始化上

    转载自  mybatis源码阅读(二):mybatis初始化上 1.初始化入口 //Mybatis 通过SqlSessionFactory获取SqlSession, 然后才能通过SqlSession与 ...

  2. datax源码阅读一:python文件

    一.前面主要是怎么使用datax和datax的插件编写,后面主要说明源码阅读部分,python相关文件 二.datax关键代码(python datax.py test.json) 1.datax.p ...

  3. LeGo-LOAM激光雷达定位算法源码阅读(二)

    文章目录 1.featureAssociation框架 1.1节点代码主体 1.2 FeatureAssociation构造函数 1.3 runFeatureAssociation()主体函数 2.重 ...

  4. nginx源码阅读(二).初始化:main函数及ngx_init_cycle函数

    前言 在分析源码时,我们可以先把握主干,然后其他部分再挨个分析就行了.接下来我们先看看nginx的main函数干了些什么. main函数 这里先介绍一些下面会遇到的变量类型: ngx_int_t: t ...

  5. DBFace: 源码阅读(二)

    上篇链接 看LZ上篇博客的时间竟然是7月18日,着实是懈怠了,其实有很多东西需要总结归纳,这周末就补一下之前欠的债吧 上篇主要介绍了DBFace的大体框架,这篇主要介绍数据的预处理部分 5. 数据预处 ...

  6. ThinkPHP源码阅读1-------访问流程

    ThinkPHP访问流程在手册1.11系统流程里就有介绍,我阅读的ThinkPHP的版本是3.1.3,大家可以看下手册,基本的流程也有,现在就是详细去介绍一下ThinkPHP的访问流程.(调试模式下的 ...

  7. caffe 源码阅读与运行流程

    bvlc:Berkeley Vision and Learning Center. pb:protobuf 的简写: 0. 运行流程 .prototxt ⇒ ImageDataParameter ⇒ ...

  8. 【SwinTransformer源码阅读二】Window Attention和Shifted Window Attention部分

    先放一下SwinTransformer的整体结构,图片源于原论文,可以发现,在Transformer的Block中 W-MSA(Window based multi-head self attenti ...

  9. Struts2源码阅读(二)_ActionContext及CleanUP Filter

    1. ActionContext ActionContext是被存放在当前线程中的,获取ActionContext也是从ThreadLocal中获取的.所以在执行拦截器. action和result的 ...

最新文章

  1. 转载:说说高斯过程回归
  2. 编程之美2.13 子数组的最大乘积
  3. D - Sequence Swapping DP
  4. REVERSE-PRACTICE-BUUCTF-1
  5. java clicked_关于java:JComponents在调用mouseClicked()之后消失
  6. java shiro登录实例_使用Shiro实现登录成功后跳转到之前的页面
  7. #{}不自动改参数类型_我是干流动补胎的,想让我的柴油机气泵自动打气,怎么改装。谢谢。...
  8. VSCode之调试html
  9. 转--计算几何常用算法概览
  10. Torch环境搭建遇到的问题
  11. ad14 drc报错_AD怎么设置DRC检查常规检查项报错?
  12. Android GifImageView加载Gif图片及原理
  13. 手把手教你用SPSS做出二元logistic回归分析
  14. 图像处理之图像质量评价指标SSIM(结构相似性)
  15. max30102c语言,max30102问题
  16. 量化投资学习——股指期货研究(三)
  17. 程序员的算法趣题:Q09 落单的男女(Java版)
  18. Spring Boot进阶(12):Spring Boot 如何获取Excel sheet页的数量?一文教会你 | 超级详细,建议收藏
  19. 【新知实验室】腾讯云TRTC服务体验
  20. CentOS升级或安装安装JDK 8

热门文章

  1. boost::mp11::mp_eval_if_q相关用法的测试程序
  2. boost::graph::isomorphism用法的测试程序
  3. boost::geometry模块自定义指针到点示例
  4. GDCM:DICOM转储到DshibaDTI的测试程序
  5. boost::container模块实现显式实例集的测试程序
  6. ITK:遮盖一张图像给定标签图
  7. DCMTK:列出DICOM结构化报告文件的内容
  8. DCMTK:测试文件是否使用DICOM Part 10格式
  9. DCMTK:测试DcmItem的newDicomElement()辅助方法
  10. VTK:Snippets之RestoreSceneFromFieldData