01 引言
通过前面的博文,我们对DataX有了一定的深入了解了:
- 《DataX教程(01)- 入门》
- 《DataX教程(02)- IDEA运行DataX完整流程(填完所有的坑)》
- 《DataX教程(03)- 源码解读(超详细版)
- 《DataX教程(04)- 配置完整解读》
- 《DataX教程(05)- DataX Web项目实践》
- 《DataX教程(06)- DataX调优》
本文主要讲解的是DataX的任务分配以及执行的流程。
02 图解任务分配及执行流程
首先贴上自己整理的一张图:
主要就是用到了几个类:
- JobContainer:任务容器
- Reader:读插件接口
- Writer:写插件接口
- JobAssignUtil:任务分配工具类
- AbstractScheduler:任务调度抽象类
- TaskGroupContainer:任务组容器
流程简要描述:
- 首先在
job.json
读取job.setting.speed里的配置,有byte
、record
、channel
; JobContainer
会先根据第一步的3个参数算出总通道数;JobContainer
会调用不同的读写插件的split
方法来为所有通道分分配任务配置;- 分配好后,
JobContainer
合并任务配置,使用JobAssignUtil
工具类来对所有通道的所有配置进行分组; - 分组后,每个组的每个通道都有分配好的配置了,这个时候使用
AbstractScheduler
来调度任务; AbstractScheduler
里面有个TaskExcutor
内部类,主要用来执行读写线程;- 读写线程里面会调用
Reader
和Writer
插件里面的具体业务方法(init()
、prepare()
、startWriter()
、post()
)。
具体的详细描述,只要点大流程图就一目了然了。
03 文末
通过前面几篇博客的学习,基本把DataX
读了一遍了,如有疑问,欢迎各位同学提出,本文完!