datax-web 是一个集成datax和xxljob定时任务优秀的同步数据库开源框架。data-web开源地址:https://github.com/WeiYe-Jing/datax-web
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。
环境准备:
JDK(1.8以上,推荐1.8)
Python(推荐Python2.7.X)
datax
github下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
快速搭建datax,下载时使用
使用datax-web,做全量同步数据,增量同步数据。
不做介绍,不会自行百度。
下载2.7.x版本安装。默认下一步安装,不做介绍,本文默认安装在:C:\Python27
下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz,解压,本文解压到:E:\workspace\datax\datax
测试是否安装成功:进入datax的bin目录:
1、新建一个文件为:stream2stream.json,把下面的内容复制到,stream2stream.json文件内。
{
"job": {
"content": [
{
"reader": {
"name": "streamreader",
"parameter": {
"sliceRecordCount": 10,
"column": [
{
"type": "long",
"value": "10"
},
{
"type": "string",
"value": "hello,你好,世界-DataX"
}
]
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"encoding": "UTF-8",
"print": true
}
}
}
],
"setting": {
"speed": {
"channel": 5
}
}
}
}
2、在bin目录输入cmd,如下图,进入doc命令窗口
3、防止乱码先输入:CHCP 65001, 再输入:python datax.py ./stream2stream.json 按回车,出现如下结果,说明按照成功了。
1、datax-web下载地址:https://github.com/WeiYe-Jing/datax-web 拉取v2.1.2版本。命令:git clone -b 分支名称 代码URL
如图,该项目主要分为5个部分,主要的是要启动datax-admin和datax-executor
导入的时候可能有报错,大部分问题都是maven包没有下载全
(建议导入之后先在项目的主目录下使用 mvn install,这样基本上所有的依赖包都会install好)
注: 项目中存在lombok包,如果没有下载该插件,需要补全log和类中缺少的set/get方法。
2、执行sql语句,语句在bin/db的目录下,执行datax_web.sql
3、修改配置文件
(1)修改datax-admin中的数据源配置
(2)修改datax-executor中的datax.py的地址和存放临时json文件地址,datax.py就是上面解压的地址:
4、datax-web,前端的代码:https://github.com/WeiYe-Jing/datax-web-ui,自己可以修改自己的风格。
5、先启动admin,再启动executor,访问地址: http://127.0.0.1:8080/index.html
1、在数据源管理,创建需要同步的数据源。
2、在datax任务模板创建数据。
4、上面几步弄好后,就会在任务管理生成一条记录。其他两条是我新建的。
5、在操作,点击执行一次。
6、在查询同步日志提示
2020-08-14 14:30:39 [JobThread.run-130]
----------- datax-web job execute start -----------
----------- Param:
2020-08-14 14:30:39 [BuildCommand.buildDataXParam-101] ------------------Command parameters:
2020-08-14 14:30:39 [ExecutorJobHandler.execute-83] java.io.IOException: Cannot run program "python": CreateProcess error=2, 系统找不到指定的文件。
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:485)
at com.wugui.datax.executor.service.jobhandler.ExecutorJobHandler.execute(ExecutorJobHandler.java:55)
at com.wugui.datatx.core.thread.JobThread.run(JobThread.java:153)
Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 4 more
2020-08-14 14:30:39 [JobThread.run-165]
----------- datax-web job execute end(finish) -----------
----------- ReturnT:ReturnT [code=500, msg=command exit value(-1) is failed, content=null]
2020-08-14 14:30:39 [TriggerCallbackThread.callbackLog-186]
----------- datax-web job callback finish.
经过调试,在datax-executor项目中 ExecutorJobHandler类的 buildDataXExecutorCmd方法
把 cmdArr.add("python"); 改为 cmdArr.add("C:\\Python27\\python.exe"); Python安装目录:
注:以上是全量同步数据,但是实际项目中往往是增量同步数据,增量包含了,数据更新,新数据的插入。
1、直接在任务管理创建任务管理:本次是sqlserver 数据库同步到 mysql数据库,其他的同步数据也是同样的道理
2、新建任务界面:可以按照下面图片填写,关键是下面同步的json。这个datax-web上有说明:https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/increment-desc.md
3、关键的json文件:先关键字段说明,后面有完整的实例;
最后完整的json格式,其他的同步方式也是按照这个方式修改
{
"job": {
"setting": {
"speed": {
"channel": 3,
"byte": 1048576
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "sqlserverreader",
"parameter": {
"username": "jOwP5VciBuEW4NAOnOP2kA==",
"password": "1KNsH0qiLohoWZu++t2RbQ==",
"column": [
"*"
],
"splitPk": "",
"connection": [
{
"jdbcUrl": [
"jdbc:sqlserver://10.34.252.117:1433;DatabaseName=GRI_DW"
],
"querySql": [
"select * from dbo.T_USER where MODIFYTIME >= DATEADD(S,CONVERT(INT,${lastTime}),'1970-01-01 08:00:00') and MODIFYTIME < DATEADD(S,CONVERT(INT,${currentTime}),'1970-01-01 08:00:00')"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"username": "yRjwDFuoPKlqya9h9H2Amg==",
"password": "Sdnsfxh3mffuyslO+D6eXg==",
"column": [
"`USERID`",
"`EMPLNAME`",
"`EMPLNO`",
"`MOBILEPHONE`",
"`SEX`",
"`AGE`",
"`USERNAME`",
"`PASSWORD`",
"`COMPANYID`",
"`COMPANYNAME`",
"`DEPTID`",
"`DEPTNAME`",
"`DUTYID`",
"`DUTYNAME`",
"`MANAGER`",
"`REMARK`",
"`MAC`",
"`FACTORYCODE`",
"`USERTYPE`",
"`FACTORYNAME`",
"`CPCUSERNAME`",
"`PERSONNELNO`",
"`ORIGINALUN`",
"`UNITYUSERNAME`",
"`WRONGPWDTIMES`",
"`STATE`",
"`EFFECTDATE`",
"`EMAILADDRESS`",
"`LASTLOGINTIME`",
"`FROZENREASON`",
"`INPUTTIME`",
"`INPUTER`",
"`MODIFIER`",
"`MODIFYTIME`",
"`VALIDATETIME`",
"`ANNEXNAME`",
"`ANNEXPATH`",
"`SAVENAME`"
],
"connection": [
{
"table": [
"t_user"
],
"jdbcUrl": "jdbc:mysql://localhost:3306/test"
}
],
"writeMode": "update (EMPLNO,MOBILEPHONE,MODIFYTIME,USERID)"
}
}
}
]
}
}