运行

cd  {YOUR_DATAX_HOME}/bin
python datax.py {YOUR_JOB.json}

debug

  • 下载DataX源码
  • 打包
mvn -U clean package assembly:assembly -Dmaven.test.skip=true

生成出目录 x:\projects\DataX\target\datax, 下面包含工作目录datax, 此时会发现少python启动文件,从5.13服务器拷贝 /opt/soft/datax/bin 目录到工作目录datax下

  • 定制 json 配置文件

  • 启动调试 命令行进入D:\projects\DataX\target\datax\datax\bin目录,调用命令 python datax.py D:\projects\DataX\target\datax\datax\bin\json\hive_to_mysql_staticinfo_maintence_add_test.json -d , 在调试选项模式启动,-d 代表调试模式

  • idea 运行调试 创建远程调试配置 image.png

java程序的入口在Engine.java,可以考虑在其main方法中下断点,开始调试

  • 后续操作 1、上面已经生成好了x:\projects\DataX\target\datax目录的工作文件,当需要更新其他插件代码时,在项目中更新,然后直接在对应插件的项目目录下进行mvn package打包,生成对应的插件jar包,然后直接将jar拷贝到x:\projects\DataX\target\datax工作目录下,响应的位置处,然后按照正常调试步骤调试即可

框架总结

设计思想 image.png

DataX采用Framework + plugin架构构建,将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

运行流程解析 image.png

重要的类、方法

JobContainer

core 模块中最重要的类。它是所有任务的 master,负责初始化、拆分、调度、运行、回收、监控和汇报。但它并不做实际的数据同步操作。

成员变量

// 可以观察一下,他的部分成员变量
private ClassLoaderSwapper classLoaderSwapper = ClassLoaderSwapper
            .newCurrentThreadClassLoaderSwapper();

private long jobId;

private String readerPluginName;

private String writerPluginName;

/**
* reader和writer jobContainer的实例
*/
private Reader.Job jobReader;

private Writer.Job jobWriter;

总体运行流程

 //从源码中截取,去除debug输出
 userConf = configuration.clone();
 this.preHandle();				
 this.init();
 this.prepare();
 this.schedule();
 this.post();
 this.postHandle();

split

它会计算作业需要的 channel 数目及将作业拆分成多个task

  1. 划分的首要是确认 needchannelNumber(需要使用的线程总数)。你可以在配置文件中配置byterecord或者channel 来调整 needchannelNumber。如果你使用 byte或record方式,则也必须配置 单通道的最大byte或record大小,通过公式 通道数量 = 全局速度/单通道最高速度。如果两者都配置了,则通过计算之后,谁的 needchannelNumber 小就采用何种方式。如果前两者都未配置,则由配置项 channel 决定。如果channel都不存在,则直接报异常
  2. 计算得到的 needChannelNumber 并不代表最终的作业切分数目,其最终还是由 reader 插件的来实现作业的具体切分,框架只给一个建议切分的任务数。
  3. MysqlReader 采用调用 CommonRdbmsReader的splite 方法
  4. 当读插件计算后,写插件必须使用相同的 taskNumber,以保证1:1的通道模型。

参考

https://blog.csdn.net/qq_39668099/article/details/124254656

https://yanglinwei.blog.csdn.net/article/details/122584478