一、DataX3.0概述
DataX是一个异构的数据源离线同步工具,致力于实现包括关系型数据库Mysql、Oracle等、HDFS、Hive、HBase、FTP等各种稳定数据源之间稳定高效的数据同步功能。
1.1 设计理念
为了解决异构数据源同步问题,DataX将网状的异步数据链变成了星型数据链路,DataX作为中间传输载体,负责连接各种数据源。
当需要接入一个新的数据的时候,只需要将此数据源对接到DataX,就能够实现跟已有数据源无缝同步。
1.2 Datax3.0框架设计
DataX本身作为离线数据同步框架,采用Framework+plugin架构构建,将数据源读取和写入抽象为Reader/writer插件,纳入到整个同步框架中。
Reader:负责采集数据源的数据,将数据发送给Framework
Writer:负责不断从Framework取数据,将数据写入目的端
Framework:作为二者的数据传输通道,并处理缓存,流控,并发,数据转换等核心技术问题。
核心模块介绍
1. DataX
完成单个数据同步的作业,我们称之为
Job
,
DataX
接受到一个
Job
之后,将启动一个进程来
完成整个作业同步过程。
DataX Job
模块是单个作业的中枢管理节点,承担了数据清理、子任务切
分
(
将单一作业计算转化为多个子
Task)
、
TaskGroup
管理等功能。
2. DataXJob
启动后,会根据不同的源端切分策略,将
Job
切分成多个小的
Task(
子任务
)
,以便于并发
执行。
Task
便是
DataX
作业的最小单元,每一个
Task
都会负责一部分数据的同步工作。
3.
切分多个
Task
之后,
DataX Job
会调用
Scheduler
模块,根据配置的并发数据量,将拆分成的
Task
重新组合,组装成
TaskGroup(
任务组
)
。每一个
TaskGroup
负责以一定的并发运行完毕分配好的所
有
Task
,默认单个任务组的并发数量为
5
。
4.
每一个
Task
都由
TaskGroup
负责启动,
Task
启动后,会固定启动
Reader—>Channel—>Writer
的
线程来完成任务同步工作。
5. DataX
作业运行起来之后,
Job
监控并等待多个
TaskGroup
模块任务完成,等待所有
TaskGroup
任务完成后Job
成功退出。否则,异常退出,进程退出值非0
调度流程
举例来说,用户提交了一个
DataX
作业,并且配置了
20
个并发,目的是将一个
200
张分表的
mysql
数据同
步到
odps
里面。
DataX
的调度决策思路是:
1. DataXJob
根据分库分表切分成了
200
个
Task
。
2.
根据
20
个并发,
DataX
计算共需要分配
4
个
TaskGroup
。
3. 4
个
TaskGroup
平分切分好的
200
个
Task
,每一个
TaskGroup
负责以
5
个并发共计运行
50
个
Task
。