0


datax和datax-web打包成docker运行

概述

  1. datax

  1. datax-web

从一台机器迁移到另一台时,要重新搭建一套运行环境,比较麻烦;打包成

  1. docker

镜像后迁移就方便多了;

因为我的

  1. mysql

版本是

  1. 8

,需要在

  1. datax

  1. read

  1. write

中手动添加

  1. 8

  1. jdbc

驱动
所以我先各自下载好了

  1. datax

  1. datax-web

,在宿主机上试了一波

  1. ok

后;
然后手动打包成了

  1. docker

镜像,方便后续迁移

我的环境

  1. ubuntu22.04
  1. jdk:1.8+
  1. python:3.10.12
  1. maven:3.8.8
  1. docker:26.00
  1. docker-compose:2.24.7
  1. datax-web:2.1.2

打包过程中还是遇到了一些细节问题,比如环境问题,

  1. datax

自身脚本问题,配置问题等;有一些

  1. linux

  1. docker

的认知,解决问题会更有方向一些.
镜像制作完,之后要新部署/迁移就方便多了;

实际部署中发现即使手动加入了新的jdbc驱动,但是在执行日志中还是发现有

  1. com.mysql.jdbc.Driver

旧驱动的

  1. warning

信息;
要彻底解决需要

  1. down datax

的代码,将jdbc驱动版本手动调整为

  1. 8.0+

的版本,然后手动打包重新上传包,我重新打包出来后有

  1. 2G+


重新打包方案写在下面了

准备工作

datax
https://github.com/alibaba/DataX/tree/datax_v202303
datax-web
https://github.com/WeiYe-Jing/datax-web/tags

  1. down

一波

  1. datax-web

的源码,用

  1. idea

打开,然后在

  1. bin

下新增一个

  1. health.sh

,一会在启动

  1. docker

容器时让后台常驻(我想的是直接调用原脚本启动,不改原来的启动脚本,所以自己塞了一个进去);
然后

  1. mvn clean install

一下,拿到

  1. datax-web-2.1.2.tar.gz

包;

因为我的

  1. mysql

  1. 8

  1. datax

  1. read

  1. writer

下的

  1. lib

中没有对应的

  1. jdbc

驱动,所以需要手动下载塞进去;

另外

  1. datax

运行需要

  1. python

环境,所以在声明

  1. FROM python:3.10.12

运行环境后,

  1. java

环境是手动

  1. add

进去

  1. jdk

后,手动配置的

  1. env

环境,这里准备好

  1. jdk8

的包即可,下面的

  1. docker file

中有对应配置;

我的运行环境是

  1. python3

,所以需要从datax的官网上把对应的

  1. python

脚本

  1. down

下来,覆盖到

  1. datax-web

的指定目录下,这个在我的

  1. dataxdatax-web

直接宿主机部署中有写.

上面步骤都

  1. ok

后,就可以开始打包镜像了;

我另一篇文章有写

  1. dataxdatax-web

直接在宿主机部署,其实宿主机

  1. ok

了,剩下的无非就是打包进

  1. docker

镜像
https://blog.csdn.net/weixin_43944305/article/details/133617114

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

health.sh

  1. whiletruedo
  2. jps |grep"Datax*"sleep30done

打包镜像

将准备

  1. ok

  1. datax

文件夹和

  1. datax-web

文件夹打包并压缩成

  1. tar.gz

,然后写一个

  1. dockerfile

,手动

  1. 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. # 复制文件到路径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环境变量
  11. ENV JAVA_HOME="/app/jdk1.8.0_181"# 将JAVA_HOME添加到PATH环境变量
  12. ENV JRE_HOME $JAVA_HOME/jre
  13. ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
  14. ENV PATH$JAVA_HOME/bin:$PATH# datax支持python3文件替换
  15. copy ./pro/datax-python3 ./datax-python3/
  16. #支持python3替换datax/bin下3个文件
  17. run mv-f ./datax-python3/datax.py ./datax/bin/
  18. run mv-f ./datax-python3/dxprof.py ./datax/bin/
  19. run mv-f ./datax-python3/perftrace.py ./datax/bin/
  20. #datax-web-admin 添加mysql8的jdbc驱动
  21. copy ./pro/mysql-connector-j-8.0.33.jar ./datax-web-2.1.2/modules/datax-admin/lib/
  22. # datax自身配置问题,手动将单个channel的大小改为2Mb
  23. RUN sed-i's/"byte": -1/"byte": 2097152/g' ./datax/conf/core.json
  24. # 启动服务
  25. 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脚本
我这边把

  1. datax-executo

r的

  1. 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#JAVA_HOME=""SERVICE_LOG_PATH=${BIN}/../logs
  2. SERVICE_CONF_PATH=${BIN}/../conf
  3. DATA_PATH=${BIN}/../data
  4. ## datax json文件存放位置JSON_PATH=${BIN}/../json
  5. ## 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
  6. ## dataxweb 服务端口SERVER_PORT=9504

datax-admin的env.properties

  1. datax-web

  1. env.properties

映射进去,方便后面调整

  1. # environment variables#JAVA_HOME="/home/felix/app/jdk/jdk1.8.0_181"WEB_LOG_PATH=${BIN}/../logs
  2. WEB_CONF_PATH=${BIN}/../conf
  3. DATA_PATH=${BIN}/../data
  4. SERVER_PORT=9527#PID_FILE_PATH=${BIN}/dataxadmin.pid# mail accountMAIL_USERNAME=""MAIL_PASSWORD=""#debug#REMOTE_DEBUG_SWITCH=true#REMOTE_DEBUG_PORT=7003

重启脚本
每次都要手敲命令,整个脚本轻松一点

  1. #!/bin/shecho'==============start stop==========='docker stop datax-web
  2. 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
  3. echo'=============end docker rmi========'docker build -t datax-web:latest .echo'ready go'docker-compose up -d

启动后执行ok

在这里插入图片描述

在这里插入图片描述

解决datax的com.mysql.jdbc.Driver老驱动问题

1-修改

  1. pom

中的

  1. mysql.driver.version

  1. 8.0.29

2-修改

  1. com.alibaba.datax.plugin.rdbms.util.DataBaseType

中的驱动

  1. name

,并且将

  1. convertToNull

修改为

  1. CONVERT_TO_NULL

3-修改

  1. com.alibaba.datax.plugin.writer.adswriter.load.AdsHelper

中的驱动

  1. name

4-重新打包后上传新的

  1. 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

标签: docker 容器

本文转载自: https://blog.csdn.net/weixin_43944305/article/details/141088293
版权归原作者 好大的月亮 所有, 如有侵权,请联系我们删除。

“datax和datax-web打包成docker运行”的评论:

还没有评论