一、DataX概述
- DataX是开源的异构数据源离线同步工具,可以实现MySQL、Oracle等、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
二、DataX可支持的数据源
- DataX目前已具备比较全面的插件体系,主流的RDBMS数据库、NoSQL、大数据计算系统都已接入,目前可支持的数据如下图所示:
类型 | 数据源 | Reader(读) | Writer(写) |
---|---|---|---|
RDBMS关系型数据库 | MySQL | √ | √ |
RDBMS关系型数据库 | Oracle | √ | √ |
RDBMS关系型数据库 | SQLServer | √ | √ |
RDBMS关系型数据库 | PostgreSQL | √ | √ |
NoSQL数据存储 | HBase0.94 | √ | √ |
NoSQL数据存储 | HBase1.1 | √ | √ |
NoSQL数据存储 | MongoDB | √ | √ |
NoSQL数据存储 | Hive | √ | √ |
无结构化数据存储 | TxtFile | √ | √ |
无结构化数据存储 | FTP | √ | √ |
无结构化数据存储 | HDFS | √ | √ |
无结构化数据存储 | Elasticsearch | √ |
三、DataX架构原理
-
DataX设计理念
-
DataX框架设计
(1)Reader:数据采集模块,负责采集数据源的数据,将数据发送给Framework。
(2)Writer:数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
(3)Framework:用于连接Reader和Writer,作为两者的数据传输通道,并处理缓冲、流控、并发、数据转换等核心技术问题。 -
DataX运行流程
下边就来看一下DataX生命周期时序图:
(1)Job:单个数据同步的作业,称为一个Job,一个Job启动一个进程。
(2)Task:根据不同数据源的切分策略,一个Job会切分为多个Task,Task是DataX作业的最小单元,每个Task负责一部分数据的同步工作。
(3)TaskGroup:Scheduler调度模块会对Task进行分组,每个Task组称为一个Task Group。每个Task Group负责一定的并发度运行其所分得的Task,单个Task Group的并发度为5。
(4)Reader -> Channel -> Writer:每个Task启动后,都会固定启动Reader -> Channel -> Writer的线程来完成同步工作。 -
DataX调度决策思路
(1)需求说明:
用户现在提交一个DataX作业,并且配置了总的并发度为20,目的是对有100张分表的MySQL数据源进行同步。
(2)DataX调度决策思路是:
1)DataX的Job会根据分库分表切分策略,将同步工作分成100个Task。
2)根据配置的总并发度为20,以及每个TaskGroup的默认并发度为5,DataX计算共需要分配4个Task Group。
3)4个Task Group平分100个Task,每个Task Group负责运行25个Task。 -
DataX与Sqoop对比
功能 | DataX | Sqoop |
---|---|---|
运行模式 | 单进程多线程 | MR |
分布式 | 不支持,可以通过调度系统来规避 | 支持 |
流控 | 有流控功能 | 需要定制 |
统计信息 | 已有一些统计,上报需定制 | 没有,分布式的数据收集不方便 |
数据校验 | 在core部分有校验功能 | 没有,分布式的数据收集不方便 |
监控 | 需要定制 | 需要定制 |