DataX介绍及使用指南
- 一、DataX概述
- 二、DataX框架设计
- 三、DataX部署及使用
- 3.1 系统环境
- 3.2 快速上手
- 3.3 调试
- 3.4 简单使用
一、DataX概述
DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
- 设计理念
为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。 - 异构数据源理念
指不同的数据库管理系统之间的数据。在企业信息化建设过程中,由于各业务系统建设和实施数据管理系统的阶段性、技术性以及其它经济和人为因素等因素影响,导致企业在发展过程中积累了大量采用不同存储方式的业务数据,包括采用的数据管理系统也大不相同,从简单的文件数据库到复杂的网络数据库,它们构成了企业的异构数据源。
企业数据源异构性主要表现在3方面:
- 系统异构,即数据源所依赖的业务应用系统、数据库管理系统乃至操作系统之间的不同构成了系统异构。
- 模式异构,即数据源在存储模式上的不同。存储模式主要包括关系模式、 对象模式、对象关系模式和文档嵌套模式等几种,其中关系模式(关系数据库)为主流存储模式。同时,即便是同一类存储模式,它们的模式结构可能也存在着差异。例如不同的关系数据管理系统的数据类型等方面并不是完全一致的,如DB2、Oracle、Sybase、Informix、SQL Server 、Foxpro等。
- 来源异构,即企业内部数据源和外部数据源之间的异构。
二、DataX框架设计
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
如果乱码,可以在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模板。
- 使用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
在这里插入图片描述