背景
在建構資料倉庫時,部分業務系統使用達夢資料庫存儲原始資料,現在需要通過datax把資料同步到雲資料庫MemFireDb中進行分析。MemFireDB是一款NewSQL資料庫系統的代表,具備高并發和彈性擴充的特點,用來作為資料倉庫的存儲系統。過程中遇到了不少問題,在此記錄一下。
下載下傳datax工具包
wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
下載下傳後解壓,進入bin目錄
cd /opt/datax/bin
執行自檢腳本,檢查環境配置是否ok
python2.7 datax.py ../job/job.json
如果螢幕列印未有異常,則環境配置正常,否則檢查運作環境是否滿足下面要求
Linux
JDK(1.8以上,推薦1.8)
Python(推薦Python2.6.X)
Apache Maven 3.x (Compile DataX)
datax支援的資料源類型
來源: https://github.com/alibaba/DataX
類型 | 資料源 | Reader(讀) | Writer(寫) | 文檔 |
---|---|---|---|---|
RDBMS 關系型資料庫 | MySQL | √ | √ | 讀 、寫 |
Oracle | √ | √ | 讀 、寫 | |
SQLServer | √ | √ | 讀 、寫 | |
PostgreSQL | √ | √ | 讀 、寫 | |
DRDS | √ | √ | 讀 、寫 | |
通用RDBMS(支援所有關系型資料庫) | √ | √ | 讀 、寫 | |
阿裡雲數倉資料存儲 | ODPS | √ | √ | 讀 、寫 |
ADS | √ | 寫 | ||
OSS | √ | √ | 讀 、寫 | |
OCS | √ | √ | 讀 、寫 | |
NoSQL資料存儲 | OTS | √ | √ | 讀 、寫 |
Hbase0.94 | √ | √ | 讀 、寫 | |
Hbase1.1 | √ | √ | 讀 、寫 | |
Phoenix4.x | √ | √ | 讀 、寫 | |
Phoenix5.x | √ | √ | 讀 、寫 | |
MongoDB | √ | √ | 讀 、寫 | |
Hive | √ | √ | 讀 、寫 | |
Cassandra | √ | √ | 讀 、寫 | |
無結構化資料存儲 | TxtFile | √ | √ | 讀 、寫 |
FTP | √ | √ | 讀 、寫 | |
HDFS | √ | √ | 讀 、寫 | |
Elasticsearch | √ | 寫 | ||
時間序列資料庫 | OpenTSDB | √ | 讀 | |
TSDB | √ | √ | 讀 、寫 |
通過指令檢視配置模闆
通過上表可以看到,無論是達夢資料庫,還是作為同步源的MemFireDB資料庫都僅支援jdbc,在datax中沒有單獨的插件來支援同步過程,是以我們隻能選擇通用RDBMS的方式來進行同步,通過下面的指令檢視配置模闆
python2.7 datax.py --reader rdbmsreader --writer rdbmswriter
将指令行的輸出内容儲存到load.json檔案中,并結合自己的環境調整參數。
{
"job": {
"content": [
{
"reader": {
"name": "rdbmsreader",
"parameter": {
"column": [],
"connection": [
{
"jdbcUrl": [],
"table": []
}
],
"password": "",
"username": "",
"where": ""
}
},
"writer": {
"name": "rdbmswriter",
"parameter": {
"column": [],
"connection": [
{
"jdbcUrl": "",
"table": []
}
],
"password": "",
"preSql": [],
"session": [],
"username": "",
"writeMode": ""
}
}
}
],
"setting": {
"speed": {
"channel": ""
}
}
}
}
參數的說明可以看
讀:https://github.com/alibaba/DataX/blob/master/rdbmsreader/doc/rdbmsreader.md
寫:https://github.com/alibaba/DataX/blob/master/rdbmswriter/doc/rdbmswriter.md
配置好load.json檔案後,開始執行同步過程
python2.7 datax.py load.json_bak
下圖是執行成功的截圖
排錯過程
No suitable driver found
同步的源的達夢資料庫未在datax中注冊,需要先注冊插件,在檔案“…/plugin/writer/rdbmswriter/plugin.json”的drivers數組中增加新的驅動類,同時需要将驅動的jar包複制到…/lib/目錄中。注意這裡和官方github的描述不一緻,官方github描述的是要将jar包複制到“…/plugin/writer/rdbmswriter/libs/”中,如果是拷貝到這個目錄中,仍然會有上述錯誤。通過檢視datax.py檔案,發現class_path設定的是…/lib目錄,如下圖
寫入模式(writeMode)配置有誤
在生成的模闆中writemode設定為空字元串,但是通用rdbms是判斷該變量是否被設定,通過getString是否取到的是空值,代碼如下:
是以此處需要将load.json中writemode這一行删掉,解決該問題。
job.setting.speed.channel] 值非法
生成的模闆中channel設定為空字元串,而實際需要的是一個數字變量,調整為數字後解決該問題。
“exception”:"Value conversion failed
在目的端建表是,錯誤地将applied字段設定為date類型,而資料源中的applied字段是datetime類型,在運作過程中會抛出轉換錯誤的異常。重建立表後解決該問題。