DataX原始碼分析一:環境搭建
最近工作中使用到了DataX工具,比較膚淺的看了看原始碼,做一個記錄。比較膚淺的探討,各位莫見笑。
【1】獲取原始碼
原始碼地址(github):[email protected]:alibaba/DataX.git
原始碼地址(gitee):[email protected]:mirrors/DataX.git
本人是從gitee上下載的原始碼。
git clone原始碼之後,使用IDEA匯入工程,檢視userGuid.md檔案,按照檔案中的說明進行編譯,生成target目錄。
本人編譯時,一次通過,沒有遇到麻煩。如果這裡有問題,可自行百度解決。
【2】安裝python
參照userGuid.md檔案,datax是使用python datax.py xxxx的命令列啟動的,需要安裝python,本人直接下載的當前最新版本(截至2022-12-05)
下載地址:https://www.python.org/ftp/python/3.11.0/python-3.11.0-amd64.exe
安裝過程省略,最後需要選中新增path的選項,此處安裝時未截圖。安裝完成後,可使用命令進行測試(在編譯出的target/bin目錄,即datax.py指令碼所在目錄下測試):
python datax.py -r txtfilereader -w txtfilewriter
執行結果如下,則說明python安裝成功,datax已經編譯成功。
【3】編寫job檔案
編寫一個job檔案,執行datax。如下的配置檔案,並不能正確執行,但是已經可以進入具體的執行外掛。為方便測試,本人使用的是txtfilereader和txtfilewriter外掛。
{ "setting": {}, "job": { "setting": { "speed": { "channel": 2 } }, "content": [ { "reader": { "name": "txtfilereader", "parameter": {View Code"path": ["E:/personal/src/DataX/target/datax/tmp"], "encoding": "UTF-8", "column": [ { "index": 0, "type": "long" }, { "index": 1, "type": "boolean" }, { "index": 2, "type": "double" }, { "index": 3, "type": "string" }, { "index": 4, "type": "date", "format": "yyyy.MM.dd" } ], "fieldDelimiter": "," } }, "writer": { "name": "txtfilewriter", "parameter": { "path": "E:/personal/src/DataX/target/datax", "fileName": "target.txt", "writeMode": "truncate", "format": "yyyy-MM-dd" } } } ] } }
執行該作業,得到以下輸出(忽略第2個紅框內容。此步驟未截圖,直接使用的下一步驟的圖):
【4】配置debug環境
為了在IDEA裡除錯程式碼,必須具備debug環境,而當前python執行的方式,是無法進入到debug環境中的。因此,對datax.py進行了修改,打印出命令列引數,配置到了IDEA中。
如下圖,僅在datax.py第236行,加了列印。235行的日誌,都是原始碼裡的。
執行後,會得到上一步驟圖中第2個紅框的內容,即datax執行的命令列引數。有了引數,就可以配置到IDEA中,並在IDEA環境下執行datax。
下面是本人擷取的命令列引數:
-server -Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\personal\src\DataX\target\datax/log -Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\personal\src\DataX\target\datax/log -Dloglevel=info -Dfile.encoding=UTF-8 -Dlogback.statusListenerClass=ch.qos.logback.core.status.NopStatusListener -Djava.security.egd=file:///dev/urandom -Ddatax.home=E:\personal\src\DataX\target\datax -Dlogback.configurationFile=E:\personal\src\DataX\target\datax/conf/logback.xml -classpath E:\personal\src\DataX\target\datax/lib/* -Dlog.file.name=tax\job\filejob_json com.alibaba.datax.core.Engine -mode standalone -jobid -1 -job E:\personal\src\DataX\target\datax\job\filejob.json
其中,-server引數配置時報錯,將其去除後,並未發現影響,因此先將其去除,在以後除錯過程中如果發現需要該引數,再查詢對應的配置。
IDEA配置過程,注意看紅框內的配置即可。
【5】debug
通過剛才的引數也可以看到,啟動類是 com.alibaba.datax.core.Engine ,找到該類,打上斷點。點debug按鈕,進行debug:
可看到,順利的進入了debug模式。
至此,datax原始碼的debug環境搭建完成。後續將以txtfilereader、txtfilewriter為例,進行淺顯的datax原始碼分析。