dataX是阿里开源的离线数据库同步工具的使用
DataX介绍:
DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
一句话:dataX是阿里开源的离线数据库同步工具。
DataX设计理念
DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。
支持的数据:
环境搭建
系统要求
系统:Linux/Windows
JDK:1.8+(推荐1.8)
Python:2.6.x(推荐Python2.6.x)
Maven:3.x
凯哥在Windos环境搭建的。资料如下图:
如果本地没有Python环境的话,下载python-2.7.6-amd64.msi。然后点击安装后。
查看python版本号:
如果没有,配置下系统环境变量就可以了。
测试:
将下载的datax.tar.gz解压后,进入到datax目录下的bin中,里面有datax.py文件。可以在cmd中测试:
python E:\datax\bin\datax.py E:\datax\job\job.json
说明:
Python:执行pytho的
E:\xx.py:datax的py脚本
E:\xx.json:同步配置的json文件
如果乱码的话,现在CMD输入:
CHCP 65001
使用示例:
1:从CVS文件中,将数据同步到mysql中
2:从mysql中将数据同步到mysql中
3:从Oracle中将数据同步到mysql中
一:从CVS文件中,将数据同步到mysql中:
1.1:配置json脚本
结构如下:
分为reader和writer两个。
reader如下图:
说明:
Path:cvs文件的位置
Encoding:编码
Column:行
skipHeader:是否跳过表头
CVS文件中数据:
writer的配置如下图:
说明:
name:是什么写。Oracle呢还是mysql呢
parameter:参数
writemode:写的模式。Insert表示插入的
username:数据库的用户名
password:数据库的密码
column:表的字段
connection:数据库连接
jdbcUrl:数据库链接
table:表名
数据库表:
1.2执行:
在datax的bin目录执行:
python datax.py ../job/ csv_mysql.json
执行后数据:
具体的json配置信息:
{ "job": { "setting": { "speed": { "channel": 1 } }, "content": [ { "reader": { "name": "txtfilereader", "parameter": { "path": ["D:/ datax.csv"], "encoding": "gbk", "column": [
{ "index": 1, "type": "string" }, { "index": 2, "type": "string" } , { "index": 3, "type": "string" } ], "fieldDelimiter": ",", "skipHeader": "true" } },
"writer": { "name": "mysqlwriter", "parameter": { "writeMode": "insert", "username": "root", "password": "123456", "column": [
"t_name", "addr", "c" ], "session": [], "connection": [ { "jdbcUrl": "jdbc:mysql://127.0.0.1:3306/guns?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8", "table": ["datax_test"] } ] } } } ] } } |
二:从mysql中将数据同步到mysql中
1:配置信息如下
reader配置:
writer配置:
配置完成后,执行方法同1.2
三:从Oracle中将数据同步到mysql中
说明:
jdbcUrl配置:"jdbcUrl": ["jdbc:oracle:thin:@localhost:1521:coredb"],
querySql:有的时候,我们同步数据的时候,需要根据条件查询同步的。所以可以在这个querysql中写sql语句。
执行同1.2
执行结果: