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流程