安装文档
Datax官方文档:
https://github.com/alibaba/DataX/blob/master/userGuid.md
Datax-web官方文档:
https://github.com/WeiYe-Jing/datax-web/blob/master/userGuid.md
Datax部署
环境
- JDK(1.8以上,推荐1.8)
- Python(2或3都可以,linux自带py2,py3执行脚本会报错,需要修改脚本)
- Apache Maven 3.x (Compile DataX,如果下载的是官方的压缩包[datax.tar.gz],不用安装这个,如果是在git拉的项目,打包时需要)
方式一: 直接使用官方提供的压缩包:
http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
下载后解压至本地某个目录,进入bin目录
$ cd{YOUR_DATAX_HOME}/bin$ python datax.py ../job/job.json
方式二: git拉取Datax源码,自己打包
https://github.com/alibaba/DataX
1. 下载Datax源码
git clone https://github.com/alibaba/DataX.git
2. maven打包
$ cd{DataX_source_code_home}$ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ ,结构如下:
bin#运行脚本conf #配置job#同步任务目录lib#依赖jarloglog_perf plugin#数据源读写插件 script
然后进入bin目录,执行官方提供测试脚本①
python datax.py ../job/job.json
Datax-web部署
环境
MySQL (5.5+) 必选,对应客户端可以选装, Linux服务上若安装mysql的客户端可以通过部署脚本快速初始化数据库
JDK (1.8.0_xxx) 必选
Maven (3.6.1+) (如果是编译打包,需要,使用官方的tar包不需要)
DataX 必选
Python (2.x) (支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下) 必选,主要用于调度执行底层DataX的启动脚本,默认的方式是以Java子进程方式执行DataX,用户可以选择以Python方式来做自定义的改造
安装
方式一: 下载官方提供的版本tar (已失效,自己去github上找把)
https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg
提取码:cpsk
方式二: 编译打包, 在build目录里会有安装包生成 build/datax-web-{version}.tar.gz
git clone https://github.com/WeiYe-Jing/datax-web.gitmvn clear install
部署(linux环境)
1. 解压安装包
tar -zxvf datax-web-{version}.tar.gz
2. 执行一键安装脚本
./bin/install.sh
在交互模式下,对各个模块的package压缩包的解压以及configure配置脚本的调用,都会请求用户确认,可根据提示查看是否安装成功,如果没有安装成功,可以重复尝试;如果不想使用交互模式,跳过确认过程,则执行以下命令安装
./bin/install.sh --force
3. 数据库初始化
如果你的服务上安装有mysql命令,在执行安装脚本的过程中则会出现以下提醒:
Scan out mysql command, so begin to initalize the databaseDo you want to initalize database with sql: [{INSTALL_PATH}/bin/db/datax-web.sql]? (Y/N)yPlease input the db host(default: 127.0.0.1): Please input the db port(default: 3306): Please input the db username(default: root): Please input the db password(default: ): Please input the db name(default: exchangis)
按照提示输入数据库地址,端口号,用户名,密码以及数据库名称,大部分情况下即可快速完成初始化。
如果服务上并没有安装mysql命令,则可以取用目录下/bin/db/datax-web.sql脚本去手动执行,完成后修改相关配置文件
安装完成后,dataxweb目录中会出现一个modules文件夹,里面包含datax-admin和datax-executor文件夹
datax-admin:是后台管理模块。
修改端口号,邮箱,日志路径(不需要可略过)
cd modules/datax-admin/binvim env.properties-------------------------------------------------------# environment variables# JAVA_HOME=""WEB_LOG_PATH=${BIN}/../logsWEB_CONF_PATH=${BIN}/../confDATA_PATH=${BIN}/../dataSERVER_PORT=19527# PID_FILE_PATH=${BIN}/dataxadmin.pid# mail accountMAIL_USERNAME=""MAIL_PASSWORD=""# debug# REMOTE_DEBUG_SWITCH=true# REMOTE_DEBUG_PORT=7003
修改数据库连接信息
cd modules/datax-admin/confvim bootstrap.properties--------------------------------------#DatabaseDB_HOST=192.168.0.xDB_PORT=3307DB_USERNAME=rootDB_PASSWORD=123456DB_DATABASE=datax_web
datax-executor:执行器
修改端口号,datax中json文件位置,脚本等信息
cd modules/datax-executor/binvim env.properties---------------------------------------------# environment variables# JAVA_HOME=""SERVICE_LOG_PATH=${BIN}/../logsSERVICE_CONF_PATH=${BIN}/../confDATA_PATH=${BIN}/../data # datax json文件存放位置JSON_PATH= # executor_portEXECUTOR_PORT=9999 # 保持和datax-admin端口一致DATAX_ADMIN_PORT=# PYTHON脚本执行位置# PYTHON_PATH=/home/hadoop/install/datax/bin/datax.pyPYTHON_PATH=## dataxweb 服务端口SERVER_PORT=9504
启动
脚本在bin目录下
## 一键启动所有服务$ ./bin/start-all.sh## 单一地启动某一模块服务$ ./bin/start.sh -m {module_name}## 一键取消所有服务$ ./bin/stop-all.sh## 单一地停止某一模块服务$ ./bin/stop.sh -m {module_name}
启动成功后,访问 http://ip:port/index.html;默认账号密码:admin/123456
使用
使用datax-web构建
1. 添加项目
2. 添加数据源
这里oracle总是获取不到Schema,代码里是根据 connection.getCatalog()获取schema,获取不到就根据数据库用户名JdbcUsername,我这边oracle用户名与schema不一样,就获取不到相关的表集合
3. 构建任务
构建完成,复制json
4. 添加任务
选择添加,任务类型选择Datax任务,将上一步的json复制进去,点击确认
将复制的json粘贴到文本框
点击确定,完成任务创建
运行任务
自己构建json
就是上面的第4步
json
{"job": {"setting": {"speed": {"byte":10485760, #全局字节大小--如果设置该值,必须在conf/core.json中设置单个channel字节大小"channel":20, #作业通道数"record":200000 #全局记录限制--同上,设置该参数,必须设置单个channel条数限制 }, "errorLimit": { "record": 1000, #允许脏数据条数限制 "percentage": 0.02 #脏数据占比 } }, "content": [ { "reader": { #源库 "name": "rdbmsreader", #reader名称,这个可以在plugin/reader中获取 "parameter": { "username":"", #数据库账号 "password":"", #数据库密码 "column" : [], #要同步的字段 "where":"", #where条件(不用带where) "connection":[ { "jdbcUrl": [], #jdbc连接(使用多个','隔开)"table": "", #表名称"querySql": "" #如果同步sql较为复杂,可以使用这个直接写sql;使用这个,上面的column,where可以不用 } ], "sliceRecordCount": 100000 } }, "writer": { #目标库 "name": "streamwriter", # 名称,这个可以在plugin/writer中获取 "parameter": { "writeMode": "insert", # 输出类型 insert、update(不存在新增,存在更新)"username": "", # 数据库账号 "password": "", # 数据库密码 "preSql": [ # 前置执行sql "truncate table table_name" ], "column":[ # 同步字段target_sql], "connection": [ { "table": [ "table_name" ], "jdbcUrl": ""} ] } } } ] }}
问题
安装好后,第一次测试,可能会出现:
com.alibaba.datax.common.exception.DataXException: Code:[Framework-03], Description:[DataX引擎配置错误,该问题通常是由于DataX安装错误引起,请联系您的运维解决 .].- 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:30) ~[datax-common-0.0.1-SNAPSHOT.jar:na]at com.alibaba.datax.core.job.JobContainer.adjustChannelNumber(JobContainer.java:430) ~[datax-core-0.0.1-SNAPSHOT.jar:na]at com.alibaba.datax.core.job.JobContainer.split(JobContainer.java:387) ~[datax-core-0.0.1-SNAPSHOT.jar:na]at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:117) ~[datax-core-0.0.1-SNAPSHOT.jar:na]at com.alibaba.datax.core.Engine.start(Engine.java:93) [datax-core-0.0.1-SNAPSHOT.jar:na]at com.alibaba.datax.core.Engine.entry(Engine.java:175) [datax-core-0.0.1-SNAPSHOT.jar:na] at com.alibaba.datax.core.Engine.main(Engine.java:208) [datax-core-0.0.1-SNAPSHOT.jar:na]2022-03-29 13:51:00.639 [job-0] INFOStandAloneJobContainerCommunicator - Total 0 records, 0 bytes | Speed 0B/s, 0 records/s | Error 0 records, 0 bytes |All Task WaitWriterTime 0.000s |All Task WaitReaderTime 0.000s | Percentage 0.00%2022-03-29 13:51:00.640 [job-0] ERROR Engine -经DataX智能分析,该任务最可能的错误原因是:com.alibaba.datax.common.exception.DataXException: Code:[Framework-03], Description:[DataX引擎配置错误,该问题通常是由于DataX安装错误引起,请联系您的运维解决 .].- 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:30) at com.alibaba.datax.core.job.JobContainer.adjustChannelNumber(JobContainer.java:430)at com.alibaba.datax.core.job.JobContainer.split(JobContainer.java:387)at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:117)at com.alibaba.datax.core.Engine.start(Engine.java:93)at com.alibaba.datax.core.Engine.entry(Engine.java:175)at com.alibaba.datax.core.Engine.main(Engine.java:208)
在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数
在conf/core.json中修改
"transport": {"channel": { "class": "com.alibaba.datax.core.transport.channel.memory.MemoryChannel", "speed": { "byte": 2000000, "record": -1 }, "flowControlInterval": 20, "capacity": 512, "byteCapacity": 67108864 }, "exchanger": { "class": "com.alibaba.datax.core.plugin.BufferedRecordExchanger", "bufferSize": 32 } }
修改core>transport>channel>speed>byte,这里改为2000000大约2M左右
window测试时,命令界面出现中文乱码,输入下面命令,在执行同步脚本即可
..\datax\bin>chcp 65001