DATAx安装
准备工作
**Java版本要求:**jdk1.8及以上 参考链接: Java 开发环境配置
**Python版本要求:**2.7.X,DataX未更新至Python3 参考链接:Python 环境搭建
由于现在用的 python 版本大多为 python3 ,如果python版本为3,为避免出错,需要把 [datax_hoem]/bin 目录下的三个py文件修改成符合 python3语法要求的文件,修改后的文件,有大神已经写出来了,如需要可下载替换:python3替换文件
DataX下载:DataX下载地址
可直接下载快速安装包,解压后可用,快速下载链接
也可以去Github(github链接)去下载源码进行编译,该方法需自行选择所需配置进行打包,如只需要Mysql的,那么其他的相关支持不需要用到,也就不需要都打包,更轻量使用。打包需使用maven工具进行打包,在pom.Xml中删除不需要的模块,再执行maven命令:mvn -U clean package assembly:assembly -Dmaven.test.skip=true,生成的文件在/target/datax/datax/下
进入到datax3.0的bin目录下执行:python datax.py …/job/job.json
得到以下图示 结果(如中文出现乱码,直接输入CHCP 65001回车,重新执行命令即可):
2020-09-10 10:15:35.899 [job-0] INFO JobContainer -
任务启动时刻 : 2020-09-10 10:15:25
任务结束时刻 : 2020-09-10 10:15:35
任务总计耗时 : 10s
任务平均流量 : 253.91KB/s
记录写入速度 : 10000rec/s
读出记录总数 : 100000
读写失败总数 : 0
如果出现上面的结果,说明该datax能够正常使用!
DATAx测试使用
1、数据表
导出数据表
字段名 | 类型 | 备注 |
---|---|---|
sys_name | varchar | 系统名称 |
bug_name | varchar | bug名称 |
bug_detail | varchar | bug细节 |
weight | tinyint | 重要度 |
并向其中插入数据,如下表所示。
sys_name | bug_name | bug_detail | weight |
---|---|---|---|
a | b | c | 2 |
b | 3 | c | 2 |
5 | 5 | c | 2 |
6 | 6 | c | 2 |
7 | 7 | c | 2 |
8 | 8 | c | 2 |
9 | 9 | c | 2 |
10 | 10 | c | 2 |
11 | 11 | c | 2 |
12 | 12 | c | 2 |
13 | 13 | c | 2 |
14 | 14 | c | 2 |
15 | 15 | c | 2 |
导入数据表数据结构同上表
字段名 | 类型 | 备注 |
---|---|---|
sys_name | varchar | 系统名称 |
bug_name | varchar | bug名称 |
bug_detail | varchar | bug细节 |
weight | tinyint | 重要度 |
2、构建任务Json
DataX工具是用json文件作为配置文件的,根据官方提供文档我们构建Json文件如下所示,test.json。
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "123456",
"column": [ "sys_name", "bug_name", "bug_detail", "weight"],
"connection": [
{
"table": [
"bugcms"
],
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"username": "root",
"password": "123456",
"column": [ "sys_name", "bug_name", "bug_detail", "weight"],
"connection": [
{
"table": [
"test"
],
"jdbcUrl": "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"
}
]
}
}
}
],
"setting": {
"speed": {
"channel": 1,
"byte": 104857600
},
"errorLimit": {
"record": 10,
"percentage": 0.05
}
}
}
}
它由三部分组成,分别是读,写和通用配置。
Reader部分,也就是读,常用以下几种参数,如表读参数表所示。
参数名 | 解释 | 备注 |
---|---|---|
name | 与要读取的数据库一致 | 字符串 |
jdbcUrl | 数据库链接 | 数组;会自动选择一个合法的链接;可以填写连接附件控制信息 |
username | 用户名 | 字符串,数据库的用户名 |
password | 密码 | 字符串,数据库的密码 |
table | 要同步的表名 | 数组,需保证表结构一致 |
column | 要同步的列名 | 数组 |
where | 选取的条件 | 字符串 |
querySql | 自定义查询语句 | 会自动忽略上述的同步条件 |
Writer部分,也就是写,常用以下几种参数,如表写参数表所示。
参数名 | 解释 | 备注 |
---|---|---|
name | 与要读取的数据库一致 | 字符串 |
jdbcUrl | 数据库链接 | 字符串;不和writer一样;可以填写连接附件控制信息 |
username | 用户名 | 字符串,数据库的用户名 |
password | 密码 | 字符串,数据库的密码 |
table | 要同步的表名 | 数组,需保证表结构一致 |
column | 要同步的列名 | 列名可以不对应,但是类型和总的个数要一致 |
preSql | 写入前执行的语句 | 数组,比如清空表等 |
postSql | 写入后执行的语句 | 数组 |
writeMode | 写入方式,默认为insert | insert/replace/update |
jdbcUrl参数说明:
jdbc:mysql://127.0.0.1:3306/bugms?useUnicode=true&characterEncoding=utf8
参数名称 | 参数说明 |
---|---|
user | 数据库用户名(用于连接数据库) |
password | 用户密码(用于连接数据库) |
useUnicode | 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true |
characterEncoding | 当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk |
autoReconnect | 当数据库连接异常中断时,是否自动重新连接? |
autoReconnectForPools | 是否使用针对数据库连接池的重连策略 |
failOverReadOnly | 自动重连成功后,连接是否设置为只读? |
maxReconnects | autoReconnect设置为true时,重试连接的次数 |
initialTimeout | autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒 |
connectTimeout | 和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本 |
socketTimeout | socket操作(读写)超时,单位:毫秒。 0表示永不超时 |
job.setting.speed(流量控制)
Job支持用户对速度的自定义控制,channel的值可以控制同步时的并发数,byte的值可以控制同步时的速度
job.setting.errorLimit(脏数据控制)
Job支持用户对于脏数据的自定义监控和告警,包括对脏数据最大记录数阈值(record值)或者脏数据占比阈值(percentage值),当Job传输过程出现的脏数据大于用户指定的数量/百分比,DataX Job报错退出。
执行:python 空格{datax文件夹路径}\bin\datax.py 空格{json配置文件的路径},如,python F:\workspace\datax\bin\datax.py F:\download\datax\job\test.json
如果有导入中文数据,注意数据库中设置的排序规则,要设成成uft8之类的。