DataX 3.0 源码解析(一)

本文深入剖析DataX 3.0源码中JobContainer的启动过程,从配置初始化、Job模式执行、任务拆分与调度等关键步骤,揭示了Java部分的调用原理。讲解了如何通过DryRun预检查、Job Reader/Writer初始化、Task Group分配及单机调度器的运作机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DataX 3.0 源码解析(一)

基本调用类分析

任务启动由python脚本新建进程进行任务执行,后续执行由Java进行,以下将对java部分进行分

其中的调用原理机制。

Engine

首先入口类为com.alibaba.datax.core.Engine的main方法,其中通过调用其本身的静态方法entry,该方法主要针对输入参入进行格式化以及校验:

BasicParser parser = new BasicParser();

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

其中需要注意运行模式是通过RUNTIME_MODE = cl.getOptionValue(“mode”)代码直接赋值给静态变量的,针对命令行参数采用了org.apache.commons的BasicParser解析,针对任务的配置文件则通过其本身的ConfigParser进行解析(可以支持本地和网络文件)。

完成配置初始化后该方法将实例化本身并调用其start方法,将初始化好的配置对象传入其中。该方法首先将类型转换进行初始化,以保证在后续数据导入导出中不兼容类型可以进行顺利的转换工作,具体通过ColumnCast.bind(configuration)方法进行绑定,其中主要针对三种类型进行初始化工作:

StringCast.init(configuration);

DateCast.init(configuration);

BytesCast.init(configuration);

接着就是利用LoadUtil.Bind(pluginCoonfigs)保存插件,便于后续读取插件相关配置信息内容。剩下就是该函数的核心流程,即判断当前的任务运行模式,是TaskGroup还是Job模式。但通过实际分析来看基本都是Job模式,所以后续我们主要以JobContainer为切入点,另一个则为TaskGroupContainer。两者均继承自AbstractContainer基类,并通过调用他们的start方法进行启动。

对于非Standlone模式还支持记录任务进度情况,进行汇报的功能。具体由最后实例化的PerfTrace类实现。

JobContainer

首先该类的构造函数中仅初始化了ErrorRecordChecker类用于检查任务是否到达错误记录限制。而主要的运行则落在了start方法中,细心读者可以发现其中读取了job.setting.dryRun配置参数,判断是否需要执行预检查(preCheck)。正常工作流程则如下所示:

preHandle

Job前置操作,即初始化preHandler插件并执行其preHandler;


AbstractJobPlugin handler = LoadUtil.loadJobPlugin(

handlerPluginType, handlerPluginName);

// todo...

handler.preHandler(configuration);

init

初始化reader和writer,实际方法中根据读写插件各自执行了对应的初始化方法,具体代码如下所示。

this.jobReader = this.initJobReader(jobPluginCollector);

this.jobWriter = this.initJobWriter(jobPluginCollector);

其中各方法均类似,就是读取对应加载对应的插件对象并调用插件对应的方法进行相关配置的设置以及对应方法的初始化,选取initJobReader方法中的部分代码片段如下:

Reader.Job jobReader = (Reader.Job) LoadUtil.loadJobPlugin(

PluginType.READER, this.readerPluginName);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值