作者:烧鸡太子爷
起源:恒生LIGHT云社区
1、前言
- 阿里云的RDS服务提供了比较完善的DTS数据迁徙的计划,然而在做非阿里云间服务或跨数据库间数据迁徙时还是须要用ETL计划来同步。
基于此,明天和大家一起针对DataX做一个分享和探讨,以便于后续在我的项目中遇到数据同步的需要的时候能够多一个技术抉择
2、DataX介绍
DataX 是淘宝开源的一个异构数据源离线同步工具,致力于实现包含关系型数据库(MySQL、postgreSQL等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳固高效的数据同步性能。咱们心愿在一个很短的工夫窗口内,将一份数据从一个数据库同时导出到多个不同类型的数据库。 DataX正是为了解决这些问题而生
DataX在阿里巴巴团体内被宽泛应用,承当了所有大数据的离线同步业务,并已继续稳固运行了6年之久。目前每天实现同步8w多道作业,每日传输数据量超过300TB。
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目前反对数据如下:
类型 | 数据源 | Reader(读) | Writer(写) | ||
---|---|---|---|---|---|
RDBMS 关系型数据库 | MySQL | √ | √ | ||
`` | Oracle | √ | √ | ||
`` | SqlServer | √ | √ | ||
`` | PostgreSQL | √ | √ | ||
`` | 达梦 | √ | √ | ||
`` | 通用RDBMS(反对所有关系型数据库) | √ | √ | ||
阿里云数仓数据存储 | ODPS | √ | √ | ||
`` | ADS | `` | √ | ||
`` | OSS | √ | √ | ||
`` | OCS | √ | √ | ||
NoSQL数据存储 | OTS | √ | √ | ||
`` | Hbase0.94 | √ | √ | ||
`` | Hbase1.1 | √ | √ | ||
`` | MongoDB | √ | √ | ||
无结构化数据存储 | TxtFile | √ | √ | ||
`` | FTP | √ | √ | ||
`` | HDFS | √ | √ |
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云社区,由恒生电子搭建的金融科技业余社区平台,分享实用技术干货、资源数据、金融科技行业趋势,拥抱所有金融开发者。
扫描下方小程序二维码,退出咱们!