基于DataX的数据同步(上)-DataX介绍以及安装

作者:烧鸡太子爷

来源:恒生LIGHT云社区

1、前言

  • 阿里云的RDS服务提供了比较完善的DTS数据迁移的方案,但是在做非阿里云间服务或跨数据库间数据迁移时还是需要用ETL方案来同步。

基于此,今天和大家一起针对DataX做一个分享和探讨,以便于后续在项目中遇到数据同步的需求的时候可以多一个技术选择

2、DataX介绍

DataX 是淘宝开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、postgreSQL等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。我们希望在一个很短的时间窗口内,将一份数据从一个数据库同时导出到多个不同类型的数据库。 DataX正是为了解决这些问题而生
DataX在阿里巴巴集团内被广泛使用,承担了所有大数据的离线同步业务,并已持续稳定运行了6年之久。目前每天完成同步8w多道作业,每日传输数据量超过300TB。

3、DataX框架设计

 title=

                                    (图片来源官网)

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各个模块相互关系。

基于DataX的数据同步(上)-DataX介绍以及安装_第1张图片

                                      (图片来源网络)

核心模块介绍:

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启动后,会固定启动ReaderChannelWriter的线程来完成任务同步工作。

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、官方编译好的包。

下载好的包:

解压官方下载的包:

基于DataX的数据同步(上)-DataX介绍以及安装_第2张图片


想向技术大佬们多多取经?开发中遇到的问题何处探讨?如何获取金融科技海量资源?

恒生LIGHT云社区,由恒生电子搭建的金融科技专业社区平台,分享实用技术干货、资源数据、金融科技行业趋势,拥抱所有金融开发者。

扫描下方小程序二维码,加入我们!

你可能感兴趣的