简介
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。
使用说明
1下载源码
从git上拉取datax代码下载到本地 git地址
2本地将代码编译
cd {
DataX_source_code_home}
mvn -U clean package assembly:assembly -Dmaven.test.skip=true
打包成功显示下图
如果编译和后续install 出现问题的话,可以暂时将出错的模块注释掉.不要因为出点错,就放弃.
但是必须保证datax-core 和datax-common 这两个模块不会出问题
在打包完后会在当前目录下形成如下目录
3.将datax的包install到本地仓库(或者公司私服上)

4.新建一个maven测试类测试datax
4.1 在pom文件中添加datax的核心依赖
<dependency>
<groupId>com.alibaba.datax</groupId>
<artifactId>datax-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
4.2 编写测试代码
package com.alibaba;
import com.alibaba.datax.common.exception.DataXException;
import com.alibaba.datax.common.exception.ExceptionTracker;
import com.alibaba.datax.core.Engine;
import groovy.util.logging.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Administrator
*/
@Slf4j
public class DataXTest {
static Logger log = LoggerFactory.getLogger(DataXTest.class);
public static void main(String[] args) {
int exitCode = 0;
/**
* classPath 为刚才打包的目录 bin的上一级目录 我的dataX源码目录为E:\study\code\DataX
* jobFilePath:要放在job目录中和job.json同级
* System.setProperty("datax.home", classPath); 必须要设置datax.home这个属性不然会找不到执行的入口
*/
String classPath ="E:\\study\\code\\DataX\\target\\datax\\datax";
String jobFilePath="E:\\study\\code\\DataX\\target\\datax\\datax\\job\\0a5c4581-b1c9-4810-8855-74624a1219f4.json";
System.setProperty("datax.home", classPath);
String[] datXArgs = {
"-job", jobFilePath, "-mode", "standalone", "-jobid", "-1"};
try {
Engine.entry(datXArgs);
}catch (DataXException e){
e.printStackTrace();
}
catch (Throwable throwable) {
/**
* 拿到异常信息入库.
*/
log.error("\n\n经DataX智能分析,该任务最可能的错误原因::\n" + ExceptionTracker.trace(throwable));
}
}
}
{
"job":{
"content":[
{
"reader":{
"parameter":{
"password":"123456",
"connection":[
{
"querySql":[
"SELECT * FROM actor"
],
"jdbcUrl":[
"jdbc:mysql://127.0.0.1:3306/test"
]
}
],
"username":"root"
},
"name":"mysqlreader"
},
"writer":{
"parameter":{
"password":"123456",
"session":[
"set session sql_mode='ANSI';"
],
"column":[
"*"
],
"connection":[
{
"jdbcUrl":"jdbc:mysql://127.0.0.1:3306/test",
"table":[
"actor_copy"
]
}
],
"writeMode":"insert",
"username":"root",
"preSql":[
"truncate table actor_copy"
]
},
"name":"mysqlwriter"
}
}
],
"setting":{
"errorLimit":{
"record":10,
"percentage":0.01
},
"speed":{
"channel":1
}
}
}
}


