DataX介绍及使用指南

  • 一、DataX概述
  • 二、DataX框架设计
  • 三、DataX部署及使用
  • 3.1 系统环境
  • 3.2 快速上手
  • 3.3 调试
  • 3.4 简单使用


一、DataX概述

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

datax引入es datax where_数据库

  • 设计理念
    为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。
  • 异构数据源理念
    指不同的数据库管理系统之间的数据。在企业信息化建设过程中,由于各业务系统建设和实施数据管理系统的阶段性、技术性以及其它经济和人为因素等因素影响,导致企业在发展过程中积累了大量采用不同存储方式的业务数据,包括采用的数据管理系统也大不相同,从简单的文件数据库到复杂的网络数据库,它们构成了企业的异构数据源。

企业数据源异构性主要表现在3方面:

  1. 系统异构,即数据源所依赖的业务应用系统、数据库管理系统乃至操作系统之间的不同构成了系统异构。
  2. 模式异构,即数据源在存储模式上的不同。存储模式主要包括关系模式、 对象模式、对象关系模式和文档嵌套模式等几种,其中关系模式(关系数据库)为主流存储模式。同时,即便是同一类存储模式,它们的模式结构可能也存在着差异。例如不同的关系数据管理系统的数据类型等方面并不是完全一致的,如DB2、Oracle、Sybase、Informix、SQL Server 、Foxpro等。
  3. 来源异构,即企业内部数据源和外部数据源之间的异构。

二、DataX框架设计

datax引入es datax where_其他_02

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

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

三、DataX部署及使用

3.1 系统环境

  • Linux/Win
  • JDK(1.8以上,推荐1.8)
  • Python(推荐Python2.7.X)
  • Apache Maven 3.x (Compile DataX)

3.2 快速上手

下载页面地址:https:///alibaba/DataX

在页面中【Quick Start】—>【Download DataX下载地址】进行下载。下载后的包名:datax.tar.gz。

3.3 调试

环境变量配置好后,cmd中输入下方语句,可出现如图所示内容。

python D:\datax\bin\datax.py D:\datax\job\job.json

datax引入es datax where_异构_03


如果乱码,可以在cmd中输入:

CHCP 65001

注:CHCP是一个计算机指令,能够显示或设置活动代码页编号。

代码页 描述

65001 UTF-8代码页

950繁体中文

936简体中文默认的GBK

437 MS-DOS美国英语

但是通过CHCP设置编码是治标不治本的

想永久的更改cmd编码值需要修改注册表

3.4 简单使用

DataX工具是用json文件作为配置文件的,D:\datax\job\job.json 为官方提供的json模板。

  1. 使用DataX将mysql数据导入到mysql中
{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "xxx",
                        "password": "72kVFvXvCpWI76oHQIGJsRw6",
                        "column": ["name","age"],
                        "where": "age=11", 
                        "connection": [
                            {
                                "table": [
                                    "user_info"
                                ],
                                "jdbcUrl": [
                                    "jdbc:mysql://172.29.30.108:3306/xxx?characterEncoding=utf8"
                                ]
                            }
                        ]
                    }
                },
                "writer": {
                        "name": "mysqlwriter",
                        "parameter": {
                        "writeMode": "xxx",
                        "username": "zhdbuser",
                        "password": "72kVFvXvCpWI76oHQIGJsRw6",
                        "column": [
                            "sync_age",
                            "sync_name"
                        ],
                        "preSql": [
                            "delete from @table"
                        ],
                        "connection": [
                            {
		      "table": [
                                    "user_info_1"
                                ],
                                "jdbcUrl":"jdbc:mysql://172.29.30.108:3306/xxx?characterEncoding=utf8"

                            }
                        ]
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": 1
            },
         "errorLimit": {
             "record": 10,
             "percentage": 0.05
            }
        }
    }
}

它由三部分组成,分别是读,写和通用配置。

Reader部分,常用以下几种参数

参数名

解释

备注

name

读取的数据库

字符串

jdbcUrl

数据库链接

数组 会自动选择一个合法的链接 可以填写连接附件控制信息

username

用户名

字符串,数据库的用户名

password

密码

字符串,数据库的密码

table

要同步的表名

数组,需保证表结构一致

where

选取的条件

字符串

querySql

自定义查询语句

会自动忽略上述条件

Writer部分,常用以下几种参数

参数名

解释

备注

name

读取的数据库

字符串

jdbcUrl

数据库链接

数组 会自动选择一个合法的链接 可以填写连接附件控制信息

username

用户名

字符串,数据库的用户名

password

密码

字符串,数据库的密码

table

要同步的表名

数组,需保证表结构一致

column

要同步的列名

列名可以不对应,但是类型和总的个数要一致

preSql

写入前执行的语句

数组,比如清空表等

postSql

写入后执行的语句

数组

writeMode

写入方式,默认为insert

insert/replace/update

job.setting.speed(流量控制)

Job支持用户对速度的自定义控制,channel的值可以控制同步时的并发数,byte的值可以控制同步时的速度

job.setting.errorLimit(脏数据控制)

Job支持用户对于脏数据的自定义监控和告警,包括对脏数据最大记录数阈值(record值)或者脏数据占比阈值(percentage值),当Job传输过程出现的脏数据大于用户指定的数量/百分比,DataX Job报错退出。

执行
cmd中输入下方语句,可出现如图所示内容。

python D:\datax\bin\datax.py D:\datax\job\mysql-demo.json

在这里插入图片描述

datax引入es datax where_异构_04


datax引入es datax where_数据源_05


datax引入es datax where_数据库_06