ToB企服应用市场:ToB评测及商务社交产业平台

标题: datax和datax-web打包成docker运行 [打印本页]

作者: 飞不高    时间: 2024-11-16 01:48
标题: datax和datax-web打包成docker运行
概述

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
  1. while true
  2. do
  3.   jps | grep "Datax*"
  4.   sleep 30
  5. done
复制代码
打包镜像

将准备ok的datax文件夹和datax-web文件夹打包并压缩成tar.gz,然后写一个dockerfile,手动build下就可以用了.
dockerfile
  1. # 基础镜像
  2. FROM python:3.10.12
  3. # author
  4. MAINTAINER felix
  5. # 创建目录
  6. RUN mkdir -p /app
  7. run mkdir -p /app/datax-python3
  8. # work dir
  9. workdir /app
  10. # 复制文件到路径
  11. add ./pro/datax.tar.gz .
  12. add ./pro/datax-web-2.1.2.tar.gz .
  13. # jdk环境
  14. add ./pro/jdk-8u181-linux-x64.tar.gz .
  15. # 设置JAVA_HOME环境变量
  16. ENV JAVA_HOME="/app/jdk1.8.0_181"
  17. # 将JAVA_HOME添加到PATH环境变量
  18. ENV JRE_HOME $JAVA_HOME/jre
  19. ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
  20. ENV PATH $JAVA_HOME/bin:$PATH
  21. # datax支持python3文件替换
  22. copy ./pro/datax-python3 ./datax-python3/
  23. #支持python3替换datax/bin下3个文件
  24. run mv -f ./datax-python3/datax.py ./datax/bin/
  25. run mv -f ./datax-python3/dxprof.py ./datax/bin/
  26. run mv -f ./datax-python3/perftrace.py ./datax/bin/
  27. #datax-web-admin 添加mysql8的jdbc驱动
  28. copy ./pro/mysql-connector-j-8.0.33.jar ./datax-web-2.1.2/modules/datax-admin/lib/
  29. # datax自身配置问题,手动将单个channel的大小改为2Mb
  30. RUN sed -i 's/"byte": -1/"byte": 2097152/g' ./datax/conf/core.json
  31. # 启动服务
  32. 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-executor的env.properties捞出来映射了下,方便设置
  1. version: '3'
  2. services:
  3.   datax-web:
  4.     build:
  5.       context: ./
  6.       dockerfile: ./Dockerfile
  7.     image: datax-web
  8.     container_name: datax-web
  9.     restart: always
  10.     privileged: true
  11.     ports:
  12.       - 9527:9527
  13.     environment:
  14.       - TZ=Asia/Shanghai
  15.       #我的mysql和datax在一个docker网段,所以直接用了容器name链接,正常可以写ip
  16.       - DB_HOST=mysql_8_0
  17.       - DB_PORT=3306
  18.       - DB_USERNAME=xxxx
  19.       - DB_PASSWORD=xxxx
  20.       - DB_DATABASE=datax_web
  21.     volumes:
  22.       - ./config/datax-executor/env.properties:/app/datax-web-2.1.2/modules/datax-executor/bin/env.properties
  23.       - ./config/datax-admin/env.properties:/app/datax-web-2.1.2/modules/datax-admin/bin/env.properties
  24.     networks:
  25.       - dev_net
  26. networks:
  27.   dev_net:
  28.     external: true
复制代码
datax-executor的env.properties
其实也没改啥,就把datax的python脚本路径写了下
  1. # environment variables
  2. #JAVA_HOME=""
  3. SERVICE_LOG_PATH=${BIN}/../logs
  4. SERVICE_CONF_PATH=${BIN}/../conf
  5. DATA_PATH=${BIN}/../data
  6. ## datax json文件存放位置
  7. JSON_PATH=${BIN}/../json
  8. ## executor_port
  9. EXECUTOR_PORT=9999
  10. ## 保持和datax-admin端口一致
  11. DATAX_ADMIN_PORT=
  12. ## PYTHON脚本执行位置
  13. #PYTHON_PATH=/home/hadoop/install/datax/bin/datax.py
  14. PYTHON_PATH=/app/datax/bin/datax.py
  15. ## dataxweb 服务端口
  16. SERVER_PORT=9504
复制代码
datax-admin的env.properties
将datax-web的env.properties映射进去,方便背面调解
  1. # environment variables
  2. #JAVA_HOME="/home/felix/app/jdk/jdk1.8.0_181"
  3. WEB_LOG_PATH=${BIN}/../logs
  4. WEB_CONF_PATH=${BIN}/../conf
  5. DATA_PATH=${BIN}/../data
  6. SERVER_PORT=9527
  7. #PID_FILE_PATH=${BIN}/dataxadmin.pid
  8. # mail account
  9. MAIL_USERNAME=""
  10. MAIL_PASSWORD=""
  11. #debug
  12. #REMOTE_DEBUG_SWITCH=true
  13. #REMOTE_DEBUG_PORT=7003
复制代码
重启脚本
每次都要手敲命令,整个脚本轻松一点
  1. #!/bin/sh
  2. echo '==============start stop==========='
  3. docker stop datax-web
  4. echo '==============end stop========='
  5. #docker ps -a | grep datax-web | awk '{print $1}' | xargs docker stop
  6. #docker rm datax-web
  7. echo '=============start docker rm======='
  8. docker ps -a | grep datax-web | awk '{print $1}' | xargs docker rm
  9. echo '=============end docker rm========='
  10. echo '=============start docker rmi======'
  11. docker rmi datax-web
  12. echo '=============end docker rmi========'
  13. docker build -t datax-web:latest .
  14. echo 'ready go'
  15. 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压缩包
  1. 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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4