DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
开源地址:https://github.com/alibaba/DataX
1、设计架构
这是一个单机的多任务的ETL工具
各个数据源通过DataX作为数据中转,实现数据的同步
下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
2、架构结构
DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
- Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
- Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
- Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
1、dataX安装
①资源准备
JDK1.8及以上(推荐JDK1.8)
python2.7
dataX(下载地址)
2、上传安装包
使用xshell或winScp上传到服务器
3、解压安装
| tar -zxvf datax.tar.gz -C /opt/datax/ |
4、检验程序安装
进入bin目录下,执行下面命令:
| python datax.py ../job/job.json |
查看日志完成检验
5、简单实例
编写一个数据源为Mysql输出到本地的job
根据MysqlReader插件编写配置文件:
| { "job": { "setting": { "speed": { "channel": 3 }, "errorLimit": { "record": 0, "percentage": 0.02 } }, "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "root", "password": "root", "column": [ "id", "age", "name" ], "connection": [ { "table": [ "girl" ], "jdbcUrl": [ "jdbc:mysql://需要连接的mysqlIP地址:3306/mysql" ] } ] } }, "writer": { "name": "streamwriter", "parameter": { "print":true } } } ] } } |
给配置文件添加可执行权限
| chmod +x mysqlTest.json |
使用运行命令运行:
| python datax.py ../job/mysqlTest.json |
注:如果一个数据需要从多个数据源获取数据还可以这样配置配置文件
| { "job": { "setting": { "speed": { "channel":1 } }, "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "root", "password": "root", "connection": [ { "querySql": [ "字段" ], "jdbcUrl": [ "jdbc:mysql://地址1:3306/database", "jdbc:mysql://地址2:3306/database", "jdbc:mysql://地址3:3306/database" ] } ] } }, "writer": { "name": "streamwriter", "parameter": { "print": false, "encoding": "UTF-8" } } } ] } } |
四、调度
一般任务很少或者情景简单的情况下,可以在Linux系统下使用CronTab进行程序的定时调度。如果任务很多可以借助其他的多任务调度软件来执行(azkaban、oozie、hue等)。