DataX 是阿里云 DataWorks数据集成 的开源版本。
在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。
DataX 实现了包括 MySQL、Oracle、OceanBase、SQLServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。
Gitee:https://github.com/alibaba/DataX
GitHub地址:https://github.com/alibaba/DataX
文档:https://github.com/alibaba/DataX/blob/master/introduction.md
DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。
当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。
DataX在阿里巴巴集团内被广泛使用,承担了所有大数据的离线同步业务,并已持续稳定运行了6年之久。
目前每天完成同步8W多道作业,每日传输数据量超过300TB。
主要特点
异构数据库和文件系统之间的数据交换
采用Framework + Plugin架构构建,Framework处理了缓冲,流控,并发,上下文加载等高速数据交换的大部分技术问题,提供了简单的接口与插件交互,插件仅需实现对数据处理系统的访问
数据传输过程在单进程内完成,全内存操作,不读写磁盘,也没有IPC
开放式的框架,开发者可以在极短的时间开发一个新插件以快速支持新的数据库/文件系统
DataX3.0框架设计
DataX本身作为离线数据同步框架,采用Framework + Plugin架构构建。
将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
Reader:
- Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
Writer:
- Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
Framework:
- Framework用于连接Reader和Writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
DataX3.0架构
DataX 3.0 开源版本支持单机多线程模式完成同步作业运行。
核心模块
DataX完成单个数据同步的作业,称之为Job:
DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。
DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。
Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。
每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。
每一个Task都由TaskGroup负责启动,Task启动后,会固定启动
Reader—>Channel—>Writer
的线程来完成任务同步工作。DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。
否则,异常退出,进程退出值非0。
调度流程
举例来说,用户提交了一个DataX作业,并且配置了20个并发。
目的是将一个100张分表的MySQL数据同步到
ODPS(Open Data Processing Service:开发数据处理服务)
里面。DataX的调度决策思路是:
- DataXJob根据分库分表切分成了100个Task。
- 根据20个并发,DataX计算共需要分配4个TaskGroup。
- 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。
DataX-WEB安装部署
SQOOP和DataX的区别
Sqoop
采用map-reduce计算框架进行导入导出,而datax仅仅在运行datax的单台机器上进行数据的抽取和加载,速度比Sqoop
慢了许多
Sqoop
只可以在关系型数据库和hadoop组件之间进行数据迁移,而在hadoop相关组件之间,比如hive和hbase之间就无法使用Sqoop
互相导入导出数据,同时在关系型数据库之间,比如mysql和oracle之间也无法通过sqoop导入导出数据与之相反,
DataX
能够分别实现关系型数据库和hadoop组件之间、关系型数据库之间、hadoop组件之间的数据迁移
Sqoop
是专门为hadoop而生,对hadoop支持度好,而DataX
可能会出现不支持高版本hadoop的现象
Sqoop
只支持官方提供的指定几种关系型数据库和hadoop组件之间的数据交换,而在DataX
中,用户只需根据自身需求修改文件,生成相应rpm包,自行安装之后就可以使用自己定制的插件
Sqoop
不支持ORC文件格式,而DataX
支持。