DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,
支持的db类型有 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能
工作机制
DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader
插件,以及向目标端写入数据的Writer
插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通
服务对象
dataX面向客户端操作,大多数适用于非及时数据收集处理,canal适用于系统级的数据同步工作,及时性、稳定性更好
目前有免费版(开源)和商业版(收费)
源码地址
https://github.com/alibaba/DataX
安装
安装前需有jdk、python开发环境
github上下载地址
https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/20220530/datax.tar.gz
datax 支持Python3需要修改替换datax/bin下面的三个python文件,替换文件地址:https://github.com/WeiYe-Jing/datax-web/tree/master/doc/datax-web/datax-python3
鄙人地址
链接:https://pan.baidu.com/s/1-itgL2jsHgKO-HXAgpFv2Q
提取码:tu4o
datax/bin 下已替换成python3的文件
测一下是否成功
D:\DataX\datax\bin>python datax.py
DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.
要是有乱码,命令行切换一下UTF-8
编码
D:\DataX\datax\bin>CHCP 65001
Active code page: 65001
使用
- 新建数据库
127.0.0.1
root
123456
库名:datax
- 新建2张数据表
table1
CREATE TABLE `table1` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
table2
CREATE TABLE `table2` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
table1中新增3条数据,table2为空表
INSERT INTO `table1` VALUES (1, '大黄');
INSERT INTO `table1` VALUES (2, '旺财');
INSERT INTO `table1` VALUES (3, '发财');
- 编写工作文件
D:\DataX\datax\job目录下,新建文件work1.json
任务目的,将数据库中table1表数据,同步到table2中国=
{
"job":{
"content":[
{
"reader":{
"name":"mysqlreader",
"parameter":{
"username":"root",
"password":"123456",
"column":[
"id",
"name"
],
"connection":[
{
"table":[
"table1"
],
"jdbcUrl":[
"jdbc:mysql://localhost/datax?characterEncoding=utf8"
]
}
]
}
},
"writer":{
"name":"mysqlwriter",
"parameter":{
"username":"root",
"password":"123456",
"column":[
"id",
"name"
],
"connection":[
{
"table":[
"table2"
],
"jdbcUrl":"jdbc:mysql://localhost/datax?characterEncoding=utf8"
}
]
}
}
}
],
"setting":{
"speed":{
"channel":1,
"byte":104857600
},
"errorLimit":{
"record":10,
"percentage":0.05
}
}
}
}
- 执行命令
python datax.py ../job/work1.json
数据已同步完成
2022-09-07 14:27:45.002 [job-0] INFO JobContainer -
任务启动时刻 : 2022-09-07 14:27:34
任务结束时刻 : 2022-09-07 14:27:45
任务总计耗时 : 10s
任务平均流量 : 0B/s
记录写入速度 : 0rec/s
读出记录总数 : 3
读写失败总数 : 0
由于table2表中有主键,再次执行下此命令会报错,再执行一次,看下失败的效果
更多work.json的编写,详见官方文档
datax-web
很多时候,使用数据同步的人,往往不是技术人员,这时,需要web后台的引入,才能更便捷的工作
DataX Web
是在DataX之上开发的分布式数据同步工具,提供简单易用的操作界面
并且提供了定时执行任务的功能
本文仅介绍Windows下使用