ETL:将大量的原始数据,经过抽取(Extract)和清洗转换(Transform)后,加载(Load)到目的端的过程,称为ETL,实现这种过程的工具,也就是ETL工具
版本:DataX v202309 DataXWeb 2.1.3-alpha-release
DataX:阿里云开源的一个异构数据源离线同步工具
Github:https://github.com/alibaba/DataX
功能介绍文档:https://github.com/alibaba/DataX/blob/master/introduction.md
在用户使用指南(https://github.com/alibaba/DataX/blob/master/userGuid.md)上虽然只写了Linux系统,但实际部署Windows也可以
JDK版本使用1.8即可
Python如果环境的版本可以选择的话,可以使用2.6或者2.7,我这边使用的是3.12.5
Maven 3.x是编译时需要的条件
一开始下载的是v202308版本,安装包下载路径:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz
因为要Python3.x,所以替换DataX /bin目录下py文件(替换的文件在:DataXWeb:doc/datax-web/datax-python3/)
由于DataX对Mysql 只支持5.x,但是我这边的Mysql DB是 8.x的
所以下载了v202309的源码,调整代码使其支持mysql 8.x
(修改代码的步骤:https://blog.csdn.net/weixin_41640312/article/details/132019719)
然后按照github中的步骤打包即可
问题:
打包过程中发现oceanbasev10writer报错,项目的libs下缺少特定jar文件,
解决:
去master分支找到了这个jar,下载后复制,即可打包成功(打包过程非常慢,不知道是不是网络的问题)
问题:
创建了Mysql 数据源之间的迁移Job(文档中并没有说mysql的限制版本,也就没有想到支持的Mysql版本这么低)
配置是正确的,但dataX一直报错
解决:
去搜索了一下,才发现版本限制,所以切换了版本
问题:
打包好最新版后,运行Mysql Job还是报错(在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数)
解决:
在打包后的datax\conf\core.json 中core.transport.speed.byte由-1修改为2000000
DataXWeb:个人开发者自行开源的项目
Github:https://github.com/WeiYe-Jing/datax-web
众所周知,DataX是使用Python命令行运行Job的Json文件配置来同步数据源,
所以使用DataXWeb来搭配使用
一开始使用的是DataXWeb v2.1.2版本,但是配置字段映射方面有点不太容易理解,就换了2.1.3-alpha-release
1. 下载源码
2. 运行datax-admin&datax-executor(按需修改配置文件)
配置文件都有说明,按照说明配置DB,以及datax.py的路径等即可。
相对来讲新版的配置比旧版更容易理解,但是,页面的数据不是很即使,操作时,还是需要刷新,不知道以后会不会调整
至于DataX创建Job的步骤我就不提了,使用DataXWeb,可以很容易创建一个Job
其他:
附上DataX支持的数据源(github上都有)
DataX的核心架构
Job通过源端切分策略,切分为多个Task,然后调用Schedule模块,根据配置的并发参数等,将Task划分为TaskGroup(默认一个TaskGroup5个Task)
每一个Task中启用一个线程,完成Reader->Channel->Writer流程