基于 DataX 的数据同步(上)-DataX 介绍以及安装
作者:烧鸡太子爷
来源:恒生LIGHT云社区
1、前言
阿里云的 RDS 服务提供了比较完善的 DTS 数据迁移的方案,但是在做非阿里云间服务或跨数据库间数据迁移时还是需要用 ETL 方案来同步。
基于此,今天和大家一起针对 DataX 做一个分享和探讨,以便于后续在项目中遇到数据同步的需求的时候可以多一个技术选择
2、DataX 介绍
3、DataX 框架设计
DataX 本身作为离线数据同步框架,采用 Framework + plugin 架构构建。将数据源读取和写入抽象成为 Reader/Writer 插件,纳入到整个同步框架中。
Reader:Reader 为数据采集模块,负责采集数据源的数据,将数据发送给 Framework。
Writer: Writer 为数据写入模块,负责不断向 Framework 取数据,并将数据写入到目的端。
Framework:Framework 用于连接 reader 和 writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
DataX 本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的 Reader 插件,以及向目标端写入数据的 Writer 插件,理论上 DataX 框架可以支持任意数据源类型的数据同步工作。同时 DataX 插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。
源码下载地址: https://github.com/alibaba/DataX
插件开发宝典地址: https://github.com/alibaba/DataX/blob/master/dataxPluginDev.md
4、DataX3.0 插件体系
DataX 目前已经有了比较全面的插件体系,主流的 RDBMS 数据库、NOSQL、大数据计算系统都已经接入。
DataX 目前支持数据如下:
DataX Framework 提供了简单的接口与插件交互,提供简单的插件接入机制,只需要任意加上一种插件,就能无缝对接其他数据源。
当然也可以自己开发插件,官方也提供了插件开发宝典。
插件开发者不用关心太多,基本只需要关注特定系统读和写,以及自己的代码在逻辑上是怎样被执行的,哪一个方法是在什么时候被调用的。在此之前,需要明确以下概念:
Job: Job 是 DataX 用以描述从一个源头到一个目的端的同步作业,是 DataX 数据同步的最小业务单元。比如:从一张 mysql 的表同步到 odps 的一个表的特定分区。
Task: Task 是为最大化而把 Job 拆分得到的最小执行单元。比如:读一张有 1024 个分表的 mysql 分库分表的 Job,拆分成 1024 个读 Task,用若干个并发执行。
TaskGroup: 描述的是一组 Task 集合。在同一个 TaskGroupContainer 执行下的 Task 集合称之为 TaskGroup
JobContainer: Job 执行器,负责 Job 全局拆分、调度、前置语句和后置语句等工作的工作单元。类似 Yarn 中的 JobTracker
TaskGroupContainer: TaskGroup 执行器,负责执行一组 Task 的工作单元,类似 Yarn 中的 TaskTracker。
简而言之, Job 拆分成 Task,在分别在框架提供的容器中执行,插件只需要实现 Job 和 Task 两部分逻辑。
5、DataX3.0 核心架构
DataX3.0 开源版本支持单机多线程模式完成同步作业运行,本小节按一个 DataX 作业声明周期的时序图,从整体架构设计非常简要说明 DataX 各个模块相互关系。
核心模块介绍:
1.DataX 完成单个数据同步的作业,我们称之为 Job,DataX 接受一个 Job 之后,将启动一个进程来完成整个作业同步过程。DataX Job 模块是单个作业的中枢管理节点,承担了数据清洗、子任务切分(将单一作业计算转化为多个子 Task).
2.DataXJob 启动后,会根据不同的源端切分策略,将 job 切分成多个小的 Task(子任务),以便于并发执行。Task 便是 DataX 作业的最小单元,每一个 Task 都负责一部分数据的同步工作。
3.切分多个 Task 之后,DataX Job 会调用 Scheduler 模块儿,根据配置的并发数据量,将拆分成的 Task 重新组合,组装成 TaskGroup(任务组)。每一个 TaskGroup 负责以一定的并发运行完毕分配好的所有 Task,默认单个任务组的并发数量为 5.
4:每一个 Task 都由 TaskGroup 负责启动,Task 启动后,会固定启动 ReaderChannelWriter 的线程来完成任务同步工作。
5.DataX 作业运行起来之后,Job 监控并等待多个 TaskGroup 模块任务完成,等待所有 TaskGroup 任务完成后 Job 成功退出。否则,异常退出,进程退出值非 0.
DataX 调度流程:
举例来说,用户提交了一个 DataX 作业,并配置了 20 个并发,目的是将一个 100 张分表的 mysql 数据同步到 odps 里面。
DataX 的调度决策思路是:
1.DataXJob 根据分库分表切分成了 100 个 Task.
2.根据 20 个并发,DataX 计算共需要分配 4 个 TaskGroup. (默认每个 TaskGroup 的并发数量是 5)
3.4 个 TaskGrou 平均切分好的 100 个 Task,每一个 TaskGroup 负责 5 个并发共计 25 个 Task.
6、DataX 安装
运行环境:
JDK (1.8.0_xxx) 必选
DataX 必选
Python (2.x) (支持 Python3 需要修改替换 datax/bin 下面的三个 python 文件,替换文件在 doc/datax-web/datax-python3 下) 必选,主要用于调度执行底层 DataX 的启动脚本,默认的方式是以 Java 子进程方式执行 DataX,用户可以选择以 Python 方式来做自定义的改造
安装:
1、源码编译 2、官方编译好的包。
下载好的包:
解压官方下载的包:
想向技术大佬们多多取经?开发中遇到的问题何处探讨?如何获取金融科技海量资源?
恒生LIGHT云社区,由恒生电子搭建的金融科技专业社区平台,分享实用技术干货、资源数据、金融科技行业趋势,拥抱所有金融开发者。
扫描下方小程序二维码,加入我们!
版权声明: 本文为 InfoQ 作者【恒生LIGHT云社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/e70db20ab4abcb2b92b898068】。文章转载请联系作者。
评论