1.环境准备
1.1 vm虚拟机
ubuntu20.4.3系统 2vcpu 4GB 40G硬盘
硬盘存储空间,若不涉及生产环境部署,考虑拓展和业务数据量,够用就行
1.2 python 2.7 、JDK1.8
datax.py 部分语法不支持3.0版本,用python3需要更换python文件,比较费劲,一般用系统自带的2.7,若没有需要行安装
提前安装好jdk1.8 正确配置环境变量
1.3 安装包:
1.3.1 datax.tar.gz :
下载地址:
https://github.com/alibaba/DataX
1.3.2 datax-web-2.1.2.tar.gz :
下载地址:datax-web/datax-web-deploy.md at master · WeiYe-Jing/datax-web · GitHub
2. 解压安装
datax 和 datax-web 有两种安装方式:
a) 下载压缩包,直接解压修改配置方式
b) 下载get源码,maven打包安装方式
本文介绍方式 a
2.1 datax安装
2.1.1 datax.tar.gz安装包解压
cd ~
# 切换到压缩包存放目录
tar -zxvf ./datax.tar.gz -C /usr/local
# 指定安装解压路径为 /usr/local
python3需要替换文件,python2.7免配置。可以直接以python2运行datax.py
2.1.2 运行脚本测试
cd /usr/local/datax
# 切换到datax_home
python ./bin/datax.py ./job/job.json
# python 运行datax.py主程序 ,启动任务配置json
异常处理:
/bin/sh: 1: java: not found
原因:root用户执行的,没有找到 java_home
如果是root用户执行的, vi /etc/profile 看看环境变量配置是否有,java_home配置
source /etc/profile
重新执行测试任务 :python ./bin/datax.py ./job/job.json
2022-09-19 14:58:23.177 [job-0] INFO StandAloneJobContainerCommunicator - Total 1000000 records, 26000000 bytes | Speed 2.48MB/s, 100000 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 0.629s | All Task WaitReaderTime 13.903s | Percentage 100.00%
2022-09-19 14:58:23.179 [job-0] INFO JobContainer -
任务启动时刻 : 2022-09-19 14:58:13
任务结束时刻 : 2022-09-19 14:58:23
任务总计耗时 : 10s
任务平均流量 : 2.48MB/s
记录写入速度 : 100000rec/s
读出记录总数 : 1000000
读写失败总数 : 0
测试stream 没问题
2.1.3 datax.py 自动生成模板
python ./bin/datax.py -r mysqlreader -w oraclewriter
# 以reader=mysql writer=oracle为例
DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.
Please refer to the mysqlreader document:
https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md
Please refer to the oraclewriter document:
https://github.com/alibaba/DataX/blob/master/oraclewriter/doc/oraclewriter.md
Please save the following configuration as a json file and use
python {DATAX_HOME}/bin/datax.py {JSON_FILE_NAME}.json
to run the job.
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [],
"connection": [
{
"jdbcUrl": [],
"table": []
}
],
"password": "",
"username": "",
"where": ""
}
},
"writer": {
"name": "oraclewriter",
"parameter": {
"column": [],
"connection": [
{
"jdbcUrl": "",
"table": []
}
],
"password": "",
"preSql": [],
"username": ""
}
}
}
],
"setting": {
"speed": {
"channel": ""
}
}
}
}
可以根据datax.py调用模板配置,生成需要作业的json
实例:
mysql 300W行数据写入oracle (提前在oracle建好表)
/usr/local/datax/job/222.json
oracle "jdbcUrl" : "jdbc:oracle:thin:@//192.168.1.160:1521/ORCL19C"
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": ["*"],
"splitPk": "id",
"connection": [
{
"jdbcUrl": ["jdbc:mysql://192.168.1.130:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8"],
"table": ["t_member"]
}
],
"password": "******",
"username": "test",
"where": ""
}
},
"writer": {
"name": "oraclewriter",
"parameter": {
"column": ["*"],
"connection": [
{
"jdbcUrl": "jdbc:oracle:thin:@//192.168.1.160:1521/ORCL19C",
"table": ["t_member"]
}
],
"password": "******",
"preSql": ["truncate table t_member"],
"username": "c##xxxxx"
}
}
}
],
"setting": {
"speed": {
"channel": "10"
}
}
}
}
执行结果:(10通道)
2022-09-19 15:55:42.347 [job-0] INFO JobContainer - PerfTrace not enable!
2022-09-19 15:55:42.347 [job-0] INFO StandAloneJobContainerCommunicator - Total 2999999 records, 107666651 bytes | Speed 2.05MB/s, 59999 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 26.427s | All Task WaitReaderTime 397.284s | Percentage 100.00%
2022-09-19 15:55:42.349 [job-0] INFO JobContainer -
任务启动时刻 : 2022-09-19 15:54:48
任务结束时刻 : 2022-09-19 15:55:42
任务总计耗时 : 54s
任务平均流量 : 2.05MB/s
记录写入速度 : 59999rec/s
读出记录总数 : 2999999
读写失败总数 : 0
OK
2.2 datax-web服务安装
2.2.1 解压
tar -zxvf ./datax-web-2.1.2.tar.gz -C ./
# 文件解压到当前目录
mv datax-web-2.1.2 datax-web
mv ./datax-web /usr/local/
# 重命名 移动
2.2.2 运行安装
cd /usr/local/datax-web
./bin/install.sh
# 需要有安装mysql ,若没有则跳过数据库信息设置,安装mysql后再修改配置
# 运行安装程序 按提示解压,输入元数据数据库配置。
cd /usr/local/datax-web
vi ./modules/datax-admin/conf/bootstrap.properties
###### DB配置 按实际mysql配置
#Database
DB_HOST=
DB_PORT=
DB_USERNAME=
DB_PASSWORD=
DB_DATABASE=
datax-web-server分为2模块:admin 、executor
2.2.3 admin配置修改
cd /usr/local/datax-web
sudo vi ./modules/datax-admin/bin/env.properties
# 修改server port、邮件、java_home等信息
JAVA_HOME=/usr/local/jdk
# java_home默认路径末尾不带'/'
SERVER_PORT=9527
# mail account 可以忽略
MAIL_USERNAME=""
MAIL_PASSWORD=""
2.2.4 executor 配置修改
cd /usr/local/datax-web
sudo vi ./modules/datax-executor/bin/env.properties
# 修改关键配置
JAVA_HOME=/usr/local/jdk
#执行datax的python脚本地址
PYTHON_PATH=/usr/local/datax/bin/datax.py
DATAX_ADMIN_PORT=
# datax默认端口 保持与datax-admin服务的端口一致;
# 默认是9527,如果没改datax-admin的端口,可以忽略
2.3 启动web服务环境
运行bin目录下start-all.sh (或者分别启动admin、executor)
cd /usr/local/datax-web
# 非root用户 执行sudo
sudo ./bin/start-all.sh
# 文件所有人是root:root
# 非root用户需要执行sudo 或者切换root用户执行
# sudo 保留当前用户的环境变量,以root身份运行
# 切换root 后需要刷新环境变量
python@ubuntu:/usr/local/datax-web$ sudo ./bin/start-all.sh
2022-09-19 17:00:50.690 [INFO] (17240) Try To Start Modules In Order
2022-09-19 17:00:50.698 [INFO] (17247) ####### Begin To Start Module: [datax-admin] ######
2022-09-19 17:00:50.706 [INFO] (17254) load environment variables
2022-09-19 17:00:51.143 [INFO] (17254) DATAX-ADMIN has been started in process
2022-09-19 17:00:51.158 [INFO] (17420) ####### Begin To Start Module: [datax-executor] ######
2022-09-19 17:00:51.168 [INFO] (17427) load environment variables
2022-09-19 17:00:51.606 [INFO] (17427) /usr/local/jdk/bin/java
2022-09-19 17:00:51.610 [INFO] (17427) Waiting DATAX-EXEXUTOR to start complete ...
2022-09-19 17:00:51.825 [INFO] (17427) DATAX-EXEXUTOR start success
jps 查看进程
python@ubuntu:/usr/local/datax-web/bin$ jps
3111 DataXAdminApplication
3384 DataXExecutorApplication
3757 Jps
启动成功
3. web访问
3.1 windows登录
username = admin password = 123456
3.2 主页面
3.3 添加数据源
3.4 创建任务
阻塞处理策略:调度过于密集执行器来不及处理时的处理策略;
单机串行:调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;
增量增新建议将阻塞策略设置为丢弃后续调度或者单机串行
设置单机串行时应该注意合理设置重试次数(失败重试的次数*每次执行时间<任务的调度周期),重试的次数如果设置的过多会导致数据重复
3.5 运行任务
这里因为设置任务失败重试3次,
因为系统环境变量设置错误 ,上次启动是切换到root用户刷新全局变量启动的,以界面执行器运行导致异常报错找不到java环境变量,重试3次
解决:1.修改当前桌面系统用户python 环境变量 /home/python/.bashrc
vi /home/python/.bashrc 把 java_home 设置正确(已正确)
2. 修改root用户java环境变量 /root/.bashrc 一样的添加设置
3. 修改/etc/profile (全局环境变量)添加java环境变量
4.修改文件权限
chown python:python -R /usr/local/datax
chown python:python -R /usr/local/datax-web
重启系统,登录,以python用户启动start-all.sh
重新在windows网页登录。重新运行任务成功。