一、下載源碼
git clone [email protected]:alibaba/DataX.git
二、編譯命令
mvn -U clean package assembly:assembly -Dmaven.test.skip=true
三、存在問題:
1、使用公司的倉庫,打包報錯,找不到一些jar包,錯誤信息:
[ERROR] Failed to execute goal on project hdfsreader: Could not resolve dependencies for project com.alibaba.datax:hdfsreader:jar:0.0.1-SNAPSHOT: The following artifacts could not be resolved: org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde, eigenbase:eigenbase-properties:jar:1.1.4: Could not find artifact org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde in nexus-public (http://nexus.xx.xx.cn/repository/maven-public/) -> [Help 1]
2、嘗試解決方法:
2.1修改maven倉庫鏡像,$用戶名/.m2/settings.xml中修改鏡像地址
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
再次打包,依然報同樣的錯誤,嘗試reimport maven、rebuild project ,但是不行
2.2 查看自己的maven安裝目錄,conf/settings.xml文件依然配置是公司的鏡像,mv settings.xml settings.xml.bak文件,再次打包,成功了。
3、問題總結,看來打包時還是讀取了maven 環境下的settings.xml裏面的鏡像,儘管工程裏面配置的是./m2/settings/xml路徑
4、問題起因,是要解決,datax同步oss數據到mysql,null值不能轉換爲long類型,報錯信息:
CONSOLE# 2020-05-28 14:48:08.917 [0-0-1-reader] ERROR StdoutPluginCollector - 髒數據:
CONSOLE# {"message":"類型轉換錯誤, 無法將[\\N] 轉換爲[LONG]","record":[{"byteSize":32,
4.1、網上的解決方案是修改datax源碼plugin-unstructured-storage-util下的UnstructuredStorageReaderUtil.class
加上一個判斷,因爲在hdfs中,null值存儲的是 \N ,所以需要把它轉換成 null存儲到Mysql中
然後重新打包,所以遇到了打包問題失敗問題。
網上嘗試加 "nullFormat":"null", 如
"encoding":"utf-8",
"fieldDelimiter":",",
"nullFormat":"null",
"path":[
.......
]
但是沒有嘗試成功,於是就該了底層源碼,然後把ossreader/lib下的plugin-unstructured-storage-util-0.0.1-SNAPSHOT.jar替換成最新的編譯jar,成功了
參考:https://blog.csdn.net/qq_33792843/article/details/91987903