GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。

概念(已持久化)

DataX是一个通用的数据同步框架,由阿里巴巴集团开发和使用。它旨在实现不同数据源之间的高效数据同步功能,包括MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS和OceanBase数据库等各种异构数据源[1]

DataX的核心架构(已持久化)

DataX的设计理念是将数据源的同步抽象为Reader插件和Writer插件,通过Framework作为数据传输通道,实现数据的读取和写入。DataX的插件体系非常丰富,支持主流的关系型数据库、NoSQL数据库和大数据计算系统。

​​

DataX的核心架构包括以下模块:

  • Job模块:负责管理整个作业的同步过程,包括数据清理、子任务切分和TaskGroup管理等功能。

  • Task模块:负责实际的数据同步工作,每个Task负责同步一部分数据。

  • TaskGroup模块:将多个Task组合成一个任务组,根据配置的并发数据量进行调度和执行。

  • Reader插件:负责从数据源读取数据并发送给Framework。

  • Writer插件:负责从Framework获取数据并将数据写入目标端。

​​

工作流程:Job就是单个的数据同步作业,根据不同的源端切分策略,将一个Job切分为多个Task子任务,然后调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。

动态参数(未持久化)

参数调优(未持久化)

速度控制

内存调整

空值处理

DataX的安装与配置

下载DataX的安装包:可以去GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。找最新版来使用。不实用最新版,需要使用Python2.x的版本,详见-->常见错误

curl -O https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz

将其移动到/opt/software​​下,然后解压到/opt/module​​中。

tar -zxvf datax.tar.gz -C /opt/module/

检测是否安装成功

python /opt/module/datax/bin/datax.py /opt/module/datax/job/job.json

显示如下即运行成功

​​

DataX的使用

用户只需要根据自己的需求根据数据源和目的地来选择相应的Reader和Writer,然后将Reader和Writer的信息配置到一个Json文件中,然后再提交数据同步任务即可。

提交数据同步任务:

python bin/datax.py path/to/your/job.json

实操

同步MySQL数据到HDFS中

案例要求为:将gmall数据库中的base_province表的数据同步到HDFS中的base_province目录下。

数据源为MySQL,所以要使用MySQLReader
目的地为HDFS,所以使用HDFSWriter

MySQLReader

MySQLReader官方文档:MysqlReader 插件文档

MySQLReader有两种模式,分别为TableMode和QuerySQLMode。
TableMode:使用table,column,where等属性声明需要同步的数据
QuerySQLMode,使用一条SQL语句声明需要同步的数据

创建Json配置文件

vim /opt/module/datax/job/base_province.json

配置文件的内容如下

常见错误

出现如下错误

​​

File "/opt/module/datax/bin/datax.py", line 114
    print readerRef
          ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(readerRef)?

问题因为使用的是老版本的DataX,需要使用Python2才可以使用。

解决使用最新版的DataX(推荐),或者换成Python2来执行。