背景
接到任务,需要部署一套可以兼容多数据源的数据抽取项目,例如从 数据库A-----拉取数据------数据库B。两边的数据库都是可以不同类型。A可以是mysql。B可以是oracle。由于之前部署过阿里开源的Datax(分布式数据同步工具),Datax-web(可视化页面),所以就直接开干。
部署Datax
由于在部署过程中,由于我的数据源的mysql版本是8.x、目标数据库也是mysql8.x。导致部署后执行任务出现以下错误
所以我打算拆分成2个部署分支,1是正常的mysql5.x部署。2是针对mysql8.x的自构建部署。
前置条件要求如下,缺少的自行搜索安装。
.jdk:1.8.x
.maven: 3.6.x
.python: 2.x 或者3.x都可以。3.x要自行替换脚本(需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下)
.mysql: 5.x以上(非必须,rds数据或者其他其他服务器的mysql数据库都可以,主要是给datax-web使用的)
1.mysql5.x部署
1.1.在Linux服务器的某个文件夹下载压缩包
git clone http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
1.2.解压压缩包
tar -zxvf datax.tar.gz
1.3.进入bin中,执行测试脚本
$ cd {YOUR_DATAX_HOME}/bin
$ python datax.py ./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
}
}
}
}
执行成功后会出现以下内容
如果出现了以下提示
【配置信息错误,您提供的配置文件[/usr/local/datax/plugin/reader/._drdsreader/plugin.json]不存在. 请检查您的配置文件】
是因为 plugin/reader 以及 plugin/writer 文件下面有一些 ._开头的文件、直接删除即可
## 进入
cd plugin/reader
## 列出全部文件
ls -al
## 删除以 ·_ 开头的文件
rm -rf ._*
## 同样的删除writer目录下的全部的以 .开头的文件
cd plugin/writer
## 列出全部文件
ls -al
## 删除以 ·_ 开头的文件
rm -rf ._*
2.mysql8.x部署
2.1.下载源码
git clone https://github.com/alibaba/DataX.git
2.2..修改mysql包的驱动版本
找到位于 {DataX_source_code_home}/mysqlreader/下的pom.xml文件
{DataX_source_code_home}/mysqlwriter/ 下的pom.xml文件
将version的值改为8.0.X(可以直接搜索‘mysql-connector-java’快速定位,X写你自己想要的版本号)
2.3..修改zeroDateTimeBehavior的值convertToNull 为 CONVERT_TO_NULL
编辑{DataX_source_code_home}/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java 文件
全文替换 convertToNull 为 CONVERT_TO_NULL
2.4.修改【DataBaseType.java】jdbc驱动的名称
全文替换 com.mysql.jdbc.Driver 为 com.mysql.cj.jdbc.Driver
2.5.jdbc链接追加useSSL=false设置_这样子可以去掉mysql的警告(非必须)
比如:python datax.py file.json ,
则file.json的配置项:"jdbcUrl":"jdbc:mysql://${writer_gateway}/oms?useUnicode=true&characterEncoding=UTF-8&useSSL=false"
2.6.通过maven打包 【建议在window中打包,Linux打包了几次都卡主了】
cd {DataX_source_code_home}
mvn -U clean package assembly:assembly -Dmaven.test.skip=true
打包成功后会显示如下内容。打包时间其实还是蛮久的。
打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ ,查看datax/plugin/writer/mysqlwriter/libs/目录,已经包含新版的驱动jar包
2.7.进入bin目录下执行脚本测试,步骤跟5.x版本的一致,没有报错就说明搞定了。
如果出现了以下提示
【配置信息错误,您提供的配置文件[/usr/local/datax/plugin/reader/._drdsreader/plugin.json]不存在. 请检查您的配置文件】
请按照上面的5.x的解决处理即可。
部署datax-web(可视化页面)
3.1.去百度云盘下载datax-web源码
https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg 提取码:cpsk
3.2.上传至服务器解压
tar -zxvf datax-web-{VERSION}.tar.gz
3.3.进去package 文件夹
解压里面的两个文件。
tar -zxvf datax-admin_2.1.2_1.tar.gz
tar -zxvf datax-executor_2.1.2_1.tar.gz
datax-admin需要mysql数据库连接。我的是rds数据库8.x.
先把/bin/db/datax-web.sql 去rds数据库执行
然后再去 datax-admin/conf/bootstrap.properties 下面,把数据库连接填上去
#Database
DB_HOST=
DB_PORT=
DB_USERNAME=
DB_PASSWORD=
DB_DATABASE=
3.4.找到 datax-execute/bin/env.properties配置文件,指定PYTHON_PATH的路径
### 执行datax的python脚本地址
PYTHON_PATH=/home/datax/bin/datax.py(请根据自己的实际位置填写)
### 保持和datax-admin服务的端口一致;默认是9527,如果没改datax-admin的端口,可以忽略
DATAX_ADMIN_PORT=
以上工作完成后,安全组(我的是阿里云服务器)需要开放 9999、9502、9527端口。
如果需要更改端口,可以去
datax-admin/bin/env.properties中
datax-executor/bin/env.properties 中
配置都改完后
启动 datax_admin项目
cd datax-admin/bin
./datax-admin.sh start
#运行日志同样在 bin目录下,可以查看日志
tail -f console.out
启动 datax-executor
cd datax-executor/bin
./datax-executor.sh start
#查看日志
tail -f console.out
通过 IP:9527/index.html 访问,输入用户名 admin 密码 123456 就可以直接访问系统
如果执行任务时,执行失败并且日志提示【在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数】,那就需要去 修改datax的配置文件。不需要重启项目
收工,有问题可以留言讨论交流