DataX运行流程-源码解读

本文详细介绍了DataX的运行流程,从Engine的main方法开始,解析configration,启动JobContainer。重点讲解了ConfigParser.parse()方法、Engine.start()方法中的split(), schedule()等关键步骤,包括reader和writer插件的初始化、任务切分、调度执行等,阐述了DataX如何实现离线数据同步。" 125512665,11448814,云之道知识付费小程序V2.4.9:新增功能与优化,"['小程序开发', '知识店铺', '内容创业', '教育机构', '全网运营']
摘要由CSDN通过智能技术生成

前言:DataX的简介等这里就不多说了。本文主要记录DataX运行流过程中的主要步骤,通过源码大概过一遍主干部分和过程中的一些重要方法。文章中代码截图都是来自源码,但,基于截图的面积限制,有些代码做了删除,留下了自己认为核心的代码作为讲解参考之用,因此会看到一些变量或方法爆红等情况,请提前知悉。此篇的展示方式和思路也是参考借鉴过别人的文章,借鉴或引用到的文章文后有reference可以参考。希望此篇作为抛砖引玉,期待讨论,指教。

前言言完,进入主题。DataX的入口是Engine这个类,直接进去看它的main方法,开始 …

  1. Engine入口(com.alibaba.datax.core.Engine)main方法里面执行entry()方法:
    在这里插入图片描述
  2. Entry()方法主要做了2件事情,解析生成configration生成一个新的Engine然后启动Engine的start()方法
    在这里插入图片描述
  3. ConfigParser.parse()这个方法主要做以下三件事,然后生成一个configration用来执行start()方法:
    1) 解析job的配置信息,由启动参数指定job.json文件。
    2) 解析DataX自带配置信息,由默认指定的core.json文件。
    3) 解析读写插件配置信息,由job.json指定的reader和writer插件信息
  4. Engine.start()方法主要目的就是启动JobContainer.start()的方法:
    在这里插入图片描述
  5. JobContainer.start()方法主要里面主要顺序执行如下图的方法,而最重要的就是 split(), schedule(),先通过文字大致了解下这几个重要方法具体是干嘛的(下面4点随便看一下有个大概印象就行,看完代码再回来总结效果会比较好一点):
    1) init()方法:根据configuration信息初始化reader和writer插件,涉及到jar包热加载,并调用插件init()操作方法,最后设置reader和writer的configuration信息。
    2)prepare()方法:reader和writer插件的初始化,保存当前classLoader,并将当前线程的classLoader设置为所给classLoader,再将当前线程的类加载器设置为保存的类加载,通过调用插件的prepare()方法实现,每个插件都有自己的jarLoader,通过集成URLClassloader实现而来。
    3)split()方法做三件事:
    a) 通过adjustChannelNumber()方法调整channel个数;
    b) 然后调用插件自己的split()方法,将reader和writer切分,需要注意,writer的切分结果要参照reader的切分结果,达到切分后数目相等,才能满足1:1的通道模型;channel的计数主要是根据byte和record的限速来实现的,在split()的函数中第一步就是计算channel的大小;split()方法reader插件会根据channel的值进行拆分,但是有些reader插件可能不会参考channel的值,writer插件会完全根据reader的插件1:1进行返回;
    c) 最后,mergeReaderAndWriterTaskConfigs(),负责合并reader、writer、transformer 并生成t
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值