Datax
ETL
ETL,是英文Extract-Transform-Load的缩写,用来描述将资料从来源端经过抽取(extract)、转置(transform)、加载(load)至目的端的过程。
DataX介绍
DataX是阿里云开源的一款离线数据同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
环境准备
- JDK(1.8以上,推荐1.8)
- Python(推荐Python2.6.X)
- Apache Maven 3.x (Compile DataX)
下载地址
http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
或者下载源码去打包
git clone git@github.com:alibaba/DataX.git
$ cd {DataX_source_code_home}
$ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
检测安装成功
解压到指定目录到根目录下运行自检脚本
- 自检脚本
bin/datax.py job/job.json
出现这个就算安装成功
使用
- python ./bin/datax.py -r streamreader -w streamwriter 查看如何使用,-r 表示怎么读区,-w 表示怎么输出,然后可以进入下方url查看如何详细文档,stram的抽风找不到了
输入流->输出流
新建一个stream2stream.json然后写入如下,运行./bin/datax.py ./stream2stream.json运行
{
"job": {
"content": [
{
"reader": {
"name": "streamreader",
"parameter": {
"column": [
{
"type":"string",
"value":"nihao"
},
{
"type":"string",
"value":"helloworld"
}
],
"sliceRecordCount": "10"
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"encoding": "utf-8",
"print": true
}
}
}
],
"setting": {
"speed": {
"channel": "2"
}
}
}
}
结果如下
MySQL->MySQL数据库备份
新建一个mysql2mysql.json写入如下,这里只是做一个demo,其他数据库使用python ./bin/datax.py -r xxx -w xxx 查看,使用./bin/datax.py ./mysql2mysql.json运行,如果报错,查看lib下有没有mysql-connector-java相关jar包没有加入即可
{
"job": {
"setting": {
"speed": {
"channel": 1
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "12345678",
"column": [
"id"
],
"connection": [
{
"table": [
"test1"
],
"jdbcUrl": [
"jdbc:mysql://localhost:3306/test"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "root",
"password": "12345678",
"column": [
"id"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://localhost:3306/test",
"table": [
"test"
]
}
]
}
}
}
]
}
}