共计 2996 个字符,预计需要花费 8 分钟才能阅读完成。
作者:烧鸡太子爷
起源:恒生 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 云社区,由恒生电子搭建的金融科技业余社区平台,分享实用技术干货、资源数据、金融科技行业趋势,拥抱所有金融开发者。
扫描下方小程序二维码,退出咱们!