当前位置: 首页 > news >正文

datax和datax-web打包成docker运行

概述

dataxdatax-web从一台机器迁移到另一台时,要重新搭建一套运行环境,比较麻烦;打包成docker镜像后迁移就方便多了;

因为我的mysql版本是8,需要在dataxreadwrite中手动添加8jdbc驱动
所以我先各自下载好了dataxdatax-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自身脚本问题,配置问题等;有一些linuxdocker的认知,解决问题会更有方向一些.
镜像制作完,之后要新部署/迁移就方便多了;

实际部署中发现即使手动加入了新的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包;

因为我的mysql8dataxreadwriter下的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

while true
dojps | grep "Datax*"sleep 30
done

打包镜像

将准备okdatax文件夹和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-executor的env.properties捞出来映射了下,方便配置

version: '3'
services:datax-web:build:context: ./dockerfile: ./Dockerfileimage: datax-webcontainer_name: datax-webrestart: alwaysprivileged: trueports:- 9527:9527environment:- TZ=Asia/Shanghai#我的mysql和datax在一个docker网段,所以直接用了容器name链接,正常可以写ip- DB_HOST=mysql_8_0- DB_PORT=3306- DB_USERNAME=root- DB_PASSWORD=Cttx10086- DB_DATABASE=datax_webvolumes:- ./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.propertiesnetworks:- dev_netnetworks: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_port
EXECUTOR_PORT=9999## 保持和datax-admin端口一致
DATAX_ADMIN_PORT=## PYTHON脚本执行位置
#PYTHON_PATH=/home/hadoop/install/datax/bin/datax.py
PYTHON_PATH=/app/datax/bin/datax.py## dataxweb 服务端口
SERVER_PORT=9504

datax-admin的env.properties
datax-webenv.properties映射进去,方便后面调整

# environment variables#JAVA_HOME="/home/felix/app/jdk/jdk1.8.0_181"WEB_LOG_PATH=${BIN}/../logs
WEB_CONF_PATH=${BIN}/../confDATA_PATH=${BIN}/../data
SERVER_PORT=9527#PID_FILE_PATH=${BIN}/dataxadmin.pid# mail account
MAIL_USERNAME=""
MAIL_PASSWORD=""#debug
#REMOTE_DEBUG_SWITCH=true
#REMOTE_DEBUG_PORT=7003

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

#!/bin/sh
echo '==============start stop==========='
docker stop datax-web
echo '==============end stop========='
#docker ps -a | grep datax-web | awk '{print $1}' | xargs docker stop
#docker rm datax-web
echo '=============start docker rm======='
docker ps -a | grep datax-web | awk '{print $1}' | xargs docker rm
echo '=============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.version8.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

相关文章:

datax和datax-web打包成docker运行

概述 datax和datax-web从一台机器迁移到另一台时,要重新搭建一套运行环境,比较麻烦;打包成docker镜像后迁移就方便多了; 因为我的mysql版本是8,需要在datax的read和write中手动添加8的jdbc驱动 所以我先各自下载好了datax和data…...

命令行参数环境变量

目录 前言: 命令行参数: 现象: 这些参数的意义: 为什么要这么做? 这些事是谁做的呢? 环境变量 现象: 创建环境变量: 结合程序理解: 前言: 我们在前…...

『大模型笔记』WizardLM:使大型预训练语言模型能够遵循复杂的指令

WizardLM: Empowering Large Pre-Trained Language Models to Follow Complex Instructions 文章目录 一. WizardLM:使大型预训练语言模型能够遵循复杂的指令二. Evolve-Instruct(优化版)2.1. 概述2.2. 实施二. 参考文献WizardLM:使大型预训练语言模型能够遵循复杂的指令:…...

编程-设计模式 2:抽象工厂模式

设计模式 2:抽象工厂模式 定义与目的 定义:抽象工厂模式提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。目的:该模式的主要目的是解耦客户端代码与产品类之间的关系,并确保一…...

阿里云智能大数据演进

本文根据7月24日飞天发布时刻产品发布会、7月5日DataFunCon2024北京站:大数据大模型.双核时代实录整理而成,演讲信息如下: 演讲人:徐晟 阿里云研究员/计算平台产品负责人 主要内容: Overview - 阿里云大数据 AI 产品…...

Java面试题———Spring篇①

目录 一,谈谈你对SpringIOC的理解 二,Spring中有哪些依赖注入方式 三,你用过哪些Spring注解 四,SpringBean的作用域有几种 五,Spring中的bean线程安全吗 六,谈谈你对SpringAOP的理解 七,…...

4章10节:用R做数据重塑,变体函数应用详解和可视化的数据预处理介绍

数据重塑(Data Reshaping)是将数据从一种结构转换为另一种结构的过程,是清理、分析和可视化数据的重要步骤。R语言作为数据科学的强大工具,提供了许多包来帮助我们进行数据重塑,其中最常用的就是dplyr包。dplyr包以其简洁的语法和高效的操作速度著称,它不仅可以帮助我们进…...

Socks5代理IP在跨境电商和网络爬虫领域的实战应用

在现代互联网环境中,Socks5代理IP因其强大的灵活性和隐私保护功能,成为了跨境电商和网络爬虫领域的重要工具。本文将探讨Socks5代理IP的基本原理,并详细介绍其在跨境电商和网络爬虫中的实际应用。 1. Socks5代理IP简介 Socks5代理IP是一种网…...

农业上的目标跟踪论文汇总

文章目录 2022Multi-object tracking using Deep SORT and modified CenterNet in cotton seedling counting (Computers and Electronics in Agriculture)A novel apple fruit detection and counting methodology based on deep learning and trunk tracking in modern orcha…...

gpxt 小程序:轨迹合并与管理的高效工具

引言 在户外探险和运动追踪领域,GPXT小程序以其独特的轨迹管理和合并功能脱颖而出,成为徒步、骑行等运动爱好者不可或缺的工具。本文将详细介绍GPXT小程序的核心功能及其对户外活动爱好者的实用性。 核心功能概览 轨迹合并 GPXT小程序允许用户将多个…...

elasticsearch集成springboot详细使用

1.es下载&配置 配置JVM 配置跨域 配置https和密码 2.es启动 .\elasticsearch.bat 或 后台启动: nohup ./bin/elasticsearch& 浏览器访问:https://localhost:9200 输入账户:elastic / 123456 3.重置es密码 .\elasticsearch-r…...

html+css网页制作 化妆品电商4个页面

htmlcss网页制作 化妆品电商4个页面 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#xff…...

微调LLama 3.1——七月论文审稿GPT第5.5版:拿早期paper-review数据集微调LLama 3.1

前言 对于llama3,我们之前已经做了针对llama3 早7数据微调后的测评 去pk llama2的早7数据微调后,推理测试集中的早期paper:出来7方面review去pk gpt4推理测试集中的早期paper:7方面reviewground truth是早期paper的7方面人工rev…...

rust 编译时报错:type annotations needed for Box

如下图所示: 解决方法: 升级time的版本: cargo update -p time...

应用方案 | 低功耗接地故障控制器D4145

一、概述 D4145 是一个接地故障断路器。它能够检测到不良的接地条件,譬如装置接触到水时,它会在有害或致命的电击发生之前将电路断开。 D4145能检测并保护从火线到地线,从零线到地线的故障.这种简单而传统的电路设计能够确保其应用自如和长时间的可靠性。…...

第一次彩色pcb打样记录

感受和总结 看到彩色电路板和绿油板放在一起,感触还是挺大的。而且彩色板还直接给沉金,感觉焊上器件不要外壳都很好看了。后面一定记录一下这个板子实现的功能。 板子功能暂时分配 五个触摸盘,为了通过触摸控制不同功能,例如&a…...

通过 MediatR 实现了请求的分发和处理器的解耦

1. 前端请求发起 假设前端通过 HTTP GET 请求访问 GetTemplateSettings 端点,URL 中包含了 SubjectUuid 和 SubjectType 作为查询参数。 2. 进入 Controller 方法 请求到达后,会进入 MinBcController 类中的 GetTemplateSettings 方法,该方…...

Naive UI+vue一些组件的注意事项

NSpace(间距 Space) 默认给出space内的组件加一个div间隔,只能批量修改space内的元素样式,不能单独修改自组件样式,一般用于横向布局,若垂直布局若需要flex布局,慎用space组件NDataTable(数据表格 Data Table) :flex-h…...

sgetrf M N is 103040 时报错,这是个bug么 lapack and Openblas the same,修复备忘

号外: $ clang-format -style"{BasedOnStyle: llvm, IndentWidth: 4}" -i hello.cpp $ clang-format -style"{BasedOnStyle: llvm, IndentWidth: 4}" -i hello.cpp IndentWidth:4不错,默认2太下了 1,现象 MN103040时&…...

[后端代码审计] PHP 数组知识汇总

文章目录 前言1. 数组基础1.1 数组概念1.2 索引数组1.3 关联数组1.4 多维数组 2. 数组函数2.1 count()2.2 array_merge()2.3 array_keys()2.4 array_values()2.5 in_array() 3. 数组遍历3.1 for循环遍历3.2 foreach遍历3.3 遍历索引数组3.4 遍历关联数组 4. 数组排序4.1 sort()…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

数据库分批入库

今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则&#xf…...