DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

开源地址https://github.com/alibaba/DataX

1、设计架构

这是一个单机的多任务的ETL工具DataX3.0简介 安装与使用

各个数据源通过DataX作为数据中转,实现数据的同步

下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

2、架构结构

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

DataX3.0简介 安装与使用

  • 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等)。

 

相关文章: