記錄部署Datax、Datax-web 過程碰到的問題

2023-06-19 18:00:38

我的第一篇部落格

 

datax在網路上部署的檔案有很多,這裡不重複闡述,只描述過程中碰到的些許問題,記錄下來。

1. 

1 ERROR RetryUtil - Exception when calling callable, 異常Msg:DataX無法連線對應的資料庫,可能原因是:1) 設定的ip/port/database/jdbc錯誤,無法連線。2) 設定的username/password錯誤,鑑權失敗。請和DBA確認該資料庫的連線資訊是否正確。
2 2023-06-19 15:10:52 [AnalysisStatistics.analysisStatisticsLog-53] java.lang.Exception: DataX無法連線對應的資料庫,可能原因是:1) 設定的ip/port/database/jdbc錯誤,無法連線。2) 設定的username/password錯誤,鑑權失敗。請和DBA確認該資料庫的連線資訊是否正確。

 

解決方法:

cd /opt/datax/plugin/reader/mysqlreader/libs 

這個目錄下,刪除掉低版本的mysql驅動版本,替換為:mysql-connector-java-8.0.*.jar

 

 

2. mysql 同步資料到hdfs上,會出現設定固定字首的多個檔案,實際檔案內資料重複了,低版本的datax未解決重複問題,

問題的原因是 hdfswriter 的 writemode 只支援 append 和 nonConflict,可以下載原始碼找到對應的模組增加覆蓋功能。

原始碼地址:alibaba/DataX: DataX是阿里雲DataWorks資料整合的開源版本。 (github.com)

很榮幸在我碰到這個問題時,原始碼的 master版本解決了此問題,那麼下載下來編譯後安裝,writeMode 增加了 truncate 功能,執行任務時若hdfs目錄下存在設定的字首檔案,會先刪除。

但是data-web 2.1.2 下拉選擇時沒有此選項,需要自行在josn檔案中修改

"path": "/warehouse/jzg_ga_prod/ods/ods_t_message_template",
"fileName": "00000",
"writeMode": "truncate",
"fieldDelimiter": "\t",

 

3. hdfs 同步至 mysql 時的髒資料導致同步失敗的問題

 UnstructuredStorageReaderUtil - CsvReader使用預設值[{"captureRawRecord":true,"columnCount":0,"comment":"#","currentRecord":-1,"delimiter":"\t","escapeMode":1,"headerCount":0,"rawRecord":"","recordDelimiter":"\u0000","safetySwitch":false,"skipEmptyRecords":true,"textQualifier":"\"","trimWhitespace":true,"useComments":false,"useTextQualifier":true,"values":[]}],csvReaderConfig值為[null]
2023-06-19 15:53:30 [AnalysisStatistics.analysisStatisticsLog-53] 2023-06-19 15:53:30.209 [0-0-0-reader] ERROR StdoutPluginCollector - 髒資料: 
2023-06-19 15:53:30 [AnalysisStatistics.analysisStatisticsLog-53] {"record":[{"byteSize":1,"index":0,"rawData":1,"type":3},{"byteSize":7,"index":1,"rawData":"註冊賬號驗證碼","type":5},{"byteSize":1,"index":2,"rawData":1,"type":3},{"byteSize":28,"index":3,"rawData":"您的驗證碼為:${code},如非本人操作,請忽略本簡訊","type":5},{"byteSize":1,"index":4,"rawData":"2","type":5},{"byteSize":1,"index":5,"rawData":"2","type":5},{"byteSize":1,"index":6,"rawData":0,"type":3},{"byteSize":1,"index":7,"rawData":"3","type":5},{"byteSize":0,"index":8,"rawData":"","type":5},{"byteSize":0,"index":9,"rawData":"","type":5}],"type":"reader","message":"No enum constant com.alibaba.datax.plugin.unstructuredstorage.reader.UnstructuredStorageReaderUtil.Type.BIGINT"}
2023-06-19 15:53:30 [AnalysisStatistics.analysisStatisticsLog-53] 2023-06-19 15:53:30.209 [0-0-0-reader] ERROR StdoutPluginCollector - 髒資料: 

原因:是datax 資料型別的問題 參考網上給出的型別對照(來源:https://www.jianshu.com/p/02e78ff57437)

 解決方法:將 bigint、 int 改為 long 即可