1. 程式人生 > 其它 >DataX原始碼分析一:環境搭建

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": {
                        
"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" } } } ] } }
View Code

執行該作業,得到以下輸出(忽略第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原始碼分析。