概述
datax
和
datax-web
从一台机器迁移到另一台时,要重新搭建一套运行环境,比较麻烦;打包成
docker
镜像后迁移就方便多了;
因为我的
mysql
版本是
8
,需要在
datax
的
read
和
write
中手动添加
8
的
jdbc
驱动
所以我先各自下载好了
datax
和
datax-web
,在宿主机上试了一波
ok
后;
然后手动打包成了
docker
镜像,方便后续迁移
我的环境
ubuntu22.04
jdk:1.8+
python:3.10.12
maven:3.8.8
docker:26.00
docker-compose:2.24.7
datax-web:2.1.2
打包过程中还是遇到了一些细节问题,比如环境问题,
datax
自身脚本问题,配置问题等;有一些
linux
和
docker
的认知,解决问题会更有方向一些.
镜像制作完,之后要新部署/迁移就方便多了;
实际部署中发现即使手动加入了新的jdbc驱动,但是在执行日志中还是发现有
com.mysql.jdbc.Driver
旧驱动的
warning
信息;
要彻底解决需要
down datax
的代码,将jdbc驱动版本手动调整为
8.0+
的版本,然后手动打包重新上传包,我重新打包出来后有
2G+
…
重新打包方案写在下面了
准备工作
datax
https://github.com/alibaba/DataX/tree/datax_v202303
datax-web
https://github.com/WeiYe-Jing/datax-web/tags
down
一波
datax-web
的源码,用
idea
打开,然后在
bin
下新增一个
health.sh
,一会在启动
docker
容器时让后台常驻(我想的是直接调用原脚本启动,不改原来的启动脚本,所以自己塞了一个进去);
然后
mvn clean install
一下,拿到
datax-web-2.1.2.tar.gz
包;
因为我的
mysql
是
8
,
datax
的
read
和
writer
下的
lib
中没有对应的
jdbc
驱动,所以需要手动下载塞进去;
另外
datax
运行需要
python
环境,所以在声明
FROM python:3.10.12
运行环境后,
java
环境是手动
add
进去
jdk
后,手动配置的
env
环境,这里准备好
jdk8
的包即可,下面的
docker file
中有对应配置;
我的运行环境是
python3
,所以需要从datax的官网上把对应的
python
脚本
down
下来,覆盖到
datax-web
的指定目录下,这个在我的
datax和datax-web
直接宿主机部署中有写.
上面步骤都
ok
后,就可以开始打包镜像了;
我另一篇文章有写
datax和datax-web
直接在宿主机部署,其实宿主机
ok
了,剩下的无非就是打包进
docker
镜像
https://blog.csdn.net/weixin_43944305/article/details/133617114
health.sh
whiletruedo
jps |grep"Datax*"sleep30done
打包镜像
将准备
ok
的
datax
文件夹和
datax-web
文件夹打包并压缩成
tar.gz
,然后写一个
dockerfile
,手动
build
下就可以用了.
dockerfile
# 基础镜像
FROM python:3.10.12
# author
MAINTAINER felix
# 创建目录
RUN mkdir-p /app
run mkdir-p /app/datax-python3
# work dir
workdir /app
# 复制文件到路径add ./pro/datax.tar.gz .add ./pro/datax-web-2.1.2.tar.gz .# jdk环境add ./pro/jdk-8u181-linux-x64.tar.gz .# 设置JAVA_HOME环境变量
ENV JAVA_HOME="/app/jdk1.8.0_181"# 将JAVA_HOME添加到PATH环境变量
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH$JAVA_HOME/bin:$PATH# datax支持python3文件替换
copy ./pro/datax-python3 ./datax-python3/
#支持python3替换datax/bin下3个文件
run mv-f ./datax-python3/datax.py ./datax/bin/
run mv-f ./datax-python3/dxprof.py ./datax/bin/
run mv-f ./datax-python3/perftrace.py ./datax/bin/
#datax-web-admin 添加mysql8的jdbc驱动
copy ./pro/mysql-connector-j-8.0.33.jar ./datax-web-2.1.2/modules/datax-admin/lib/
# datax自身配置问题,手动将单个channel的大小改为2Mb
RUN sed-i's/"byte": -1/"byte": 2097152/g' ./datax/conf/core.json
# 启动服务
CMD sh-c"./datax-web-2.1.2/bin/install.sh --force"&&sh-c"./datax-web-2.1.2/bin/start-all.sh"&&sh-c"./datax-web-2.1.2/bin/health.sh"
docker-compose脚本
我这边把
datax-executo
r的
env.properties
捞出来映射了下,方便配置
version: '3'
services:
datax-web:
build:
context: ./
dockerfile: ./Dockerfile
image: datax-web
container_name: datax-web
restart: always
privileged: true
ports:
- 9527:9527
environment:
- TZ=Asia/Shanghai
#我的mysql和datax在一个docker网段,所以直接用了容器name链接,正常可以写ip
- DB_HOST=mysql_8_0
- DB_PORT=3306
- DB_USERNAME=xxxx
- DB_PASSWORD=xxxx
- DB_DATABASE=datax_web
volumes:
- ./config/datax-executor/env.properties:/app/datax-web-2.1.2/modules/datax-executor/bin/env.properties
- ./config/datax-admin/env.properties:/app/datax-web-2.1.2/modules/datax-admin/bin/env.properties
networks:
- dev_net
networks:
dev_net:
external: true
datax-executor的env.properties
其实也没改啥,就把datax的python脚本路径写了下
# environment variables#JAVA_HOME=""SERVICE_LOG_PATH=${BIN}/../logs
SERVICE_CONF_PATH=${BIN}/../conf
DATA_PATH=${BIN}/../data
## datax json文件存放位置JSON_PATH=${BIN}/../json
## executor_portEXECUTOR_PORT=9999## 保持和datax-admin端口一致DATAX_ADMIN_PORT=## PYTHON脚本执行位置#PYTHON_PATH=/home/hadoop/install/datax/bin/datax.pyPYTHON_PATH=/app/datax/bin/datax.py
## dataxweb 服务端口SERVER_PORT=9504
datax-admin的env.properties
将
datax-web
的
env.properties
映射进去,方便后面调整
# environment variables#JAVA_HOME="/home/felix/app/jdk/jdk1.8.0_181"WEB_LOG_PATH=${BIN}/../logs
WEB_CONF_PATH=${BIN}/../conf
DATA_PATH=${BIN}/../data
SERVER_PORT=9527#PID_FILE_PATH=${BIN}/dataxadmin.pid# mail accountMAIL_USERNAME=""MAIL_PASSWORD=""#debug#REMOTE_DEBUG_SWITCH=true#REMOTE_DEBUG_PORT=7003
重启脚本
每次都要手敲命令,整个脚本轻松一点
#!/bin/shecho'==============start stop==========='docker stop datax-web
echo'==============end stop========='#docker ps -a | grep datax-web | awk '{print $1}' | xargs docker stop#docker rm datax-webecho'=============start docker rm======='dockerps-a|grep datax-web |awk'{print $1}'|xargsdockerrmecho'=============end docker rm========='echo'=============start docker rmi======'docker rmi datax-web
echo'=============end docker rmi========'docker build -t datax-web:latest .echo'ready go'docker-compose up -d
启动后执行ok
解决datax的com.mysql.jdbc.Driver老驱动问题
1-修改
pom
中的
mysql.driver.version
为
8.0.29
2-修改
com.alibaba.datax.plugin.rdbms.util.DataBaseType
中的驱动
name
,并且将
“convertToNull”
修改为
“CONVERT_TO_NULL”
3-修改
com.alibaba.datax.plugin.writer.adswriter.load.AdsHelper
中的驱动
name
4-重新打包后上传新的
datax
压缩包
mvn -U clean package assembly:assembly -Dmaven.test.skip=true
参考博文
https://www.cnblogs.com/ll409546297/p/17541727.html
https://www.cnblogs.com/zifan/p/12550747.html
版权归原作者 好大的月亮 所有, 如有侵权,请联系我们删除。