Datax的学习笔记
1. 简介
Datax 是阿里巴巴集团内被广泛使用的异构数据源离线同步工具,致力于实现包括 关系型数据库(MySQL、Oracle等)、HDFS、Hive、MaxCompute(原ODPS)、HBase、FTP等各种异构数据源(即不同的数据库)之间稳定高效的数据同步功能。
1.1 设计理念
为了解决异构数据源同步问题,DataX 将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。
1.2 框架设计
DataX本身作为离线数据同步框架,采用 Framework + plugin 架构构建。将数据源读取和写入抽象成为 Reader/Writer 插件,纳入到整个同步框架中。
-
Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给 Framework。
-
Writer:Writer 为数据写入模块,负责不断向 Framework 中取数据,并将数据写入到目的端。
-
Framework:Framework 用于连接 reader 和 writer,作为两者数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
DataX 3.0 开源版本支持单机多线程模式完成同步作业运行。详情参考:阿里云开源离线同步工具DataX3.0介绍
1.3 优点
- 可靠的数据质量监控(让数据可以完整无损的传输到目的端)
- 丰富的数据转换功能
- 精准的速度控制
- 新版本DataX3.0 提供了包括通道(并发)、记录流、字节流三种流控模式,可以随意控制你的作业速度,让你的作业在库可以承受的范围内达到最佳的同步速度。
- 强劲的同步性能:每一种读插件都有一种或多种切分策略,都能将作业合理切分成多个Task并行执行,单机多线程执行模型可以让DataX 速度随并发成线性增长。
- 健壮的容错机制(多层次局部/全局的重试)
- 极简的使用体验。下载即可用、详细的日志信息。
1.4 系统需求
- Linux
- JDK(1.8以上,推荐1.8)
- Python(推荐Python2.6 X)
- Apache Maven 3.x(Compile DataX)
1.4 搭建
官网步骤:https://github.com/alibaba/DataX/blob/master/userGuid.md
2. 相关概念
异构数据源
指不同的数据库管理系统之间的数据。在企业信息化建设过程中,由于各业务系统建设和实施数据管理系统的阶段性、技术性以及其他经济和人为因素等因素影响,导致企业在发展过程中积累了大量采用不同存储方式的业务数据,包括采用的数据管理系统也大不相同,从简单的文件数据库到复杂的网络数据库,它们构成了企业的异构数据源。
企业数据源异构性主要表现在3方面:
- 系统异构,即数据源所依赖的业务应用系统、数据库管理系统乃至操作系统之间的不同构成了系统异构。
- 模式异构,即数据源在存储模式上的不同。存储模式主要包括关系模式、对象模式、对象关系模式和文档嵌套等几种,其中关系模式(关系数据库)为主流存储模式。同时,即便是同一类存储模式,他们的模式结构可能也存在着差异。例如不同的关系数据管理系统的数据类型等方面并不是完全一致的,如 DB2、Oracle、Sybase、Informix、SQL Server、Foxpro等。
- 来源异构,即企业内部数据源和外部数据源之间的异构。
3. DataX3.0 核心架构
DataX 完成单个数据通过不的作业,我们成为Job,DataX 接受到一个 Job 后,将启动一个进程来完成整个作业同步过程。DataX Job 模块是单个作业的中枢管理节点,承担了数据清理、子任务切分、TaskGroup 管理等功能。
- DataX Job 启动后,会根据不同源端的切分策略,将 Job 切分成多个小的 Task (子任务),以便于并发执行 。
- 接着 DataX Job 会调用 Scheduler 模块,根据配置的并发数量,将拆分成的 Task 重新组合,组装成 TaskGroup (任务组)
- 每一个 Task 都由 TaskGroup 负责启动,Task 启动后,会固定启动 Reader --> Channel --> Writer 线程来完成任务同步工作。
- DataX 作业运行启动后,Job 会对 TaskGroup 进行监控操作,等待所有 TaskGroup 完成后,Job 便会成功推出(异常退出时 值非0)
组成介绍:
- Job:单个作业的管理节点,负责数据清理、子任务划分、TashGroup监控管理。
- Task:由Job切分而来,是DataX作业的最小单元,每个Task负责一部分数据的同步工作。
- Schedule:将Task 组成 TaskGroup,单个 TaskGroup的并发数量为5。
- TaskGroup:负责启动Task。
DataX 调度过程:
- 首先 DataX Job 模块会根据分库分表切分成若干个 Task,然后根据用户配置并发数,来计算需要分配多少个 TaskGroup;
- 计算过程:
Task / Channel = TaskGroup
,最后由 TaskGroup 根据分配好的并发数来运行 Task (任务)