天天看點

用阿裡datax從達夢同步資料到MemFireDB時踩過的坑背景下載下傳datax工具包下載下傳後解壓,進入bin目錄執行自檢腳本,檢查環境配置是否okdatax支援的資料源類型通過指令檢視配置模闆配置好load.json檔案後,開始執行同步過程排錯過程

背景

在建構資料倉庫時,部分業務系統使用達夢資料庫存儲原始資料,現在需要通過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
           

下圖是執行成功的截圖

用阿裡datax從達夢同步資料到MemFireDB時踩過的坑背景下載下傳datax工具包下載下傳後解壓,進入bin目錄執行自檢腳本,檢查環境配置是否okdatax支援的資料源類型通過指令檢視配置模闆配置好load.json檔案後,開始執行同步過程排錯過程

排錯過程

No suitable driver found

用阿裡datax從達夢同步資料到MemFireDB時踩過的坑背景下載下傳datax工具包下載下傳後解壓,進入bin目錄執行自檢腳本,檢查環境配置是否okdatax支援的資料源類型通過指令檢視配置模闆配置好load.json檔案後,開始執行同步過程排錯過程

同步的源的達夢資料庫未在datax中注冊,需要先注冊插件,在檔案“…/plugin/writer/rdbmswriter/plugin.json”的drivers數組中增加新的驅動類,同時需要将驅動的jar包複制到…/lib/目錄中。注意這裡和官方github的描述不一緻,官方github描述的是要将jar包複制到“…/plugin/writer/rdbmswriter/libs/”中,如果是拷貝到這個目錄中,仍然會有上述錯誤。通過檢視datax.py檔案,發現class_path設定的是…/lib目錄,如下圖

用阿裡datax從達夢同步資料到MemFireDB時踩過的坑背景下載下傳datax工具包下載下傳後解壓,進入bin目錄執行自檢腳本,檢查環境配置是否okdatax支援的資料源類型通過指令檢視配置模闆配置好load.json檔案後,開始執行同步過程排錯過程

寫入模式(writeMode)配置有誤

用阿裡datax從達夢同步資料到MemFireDB時踩過的坑背景下載下傳datax工具包下載下傳後解壓,進入bin目錄執行自檢腳本,檢查環境配置是否okdatax支援的資料源類型通過指令檢視配置模闆配置好load.json檔案後,開始執行同步過程排錯過程

在生成的模闆中writemode設定為空字元串,但是通用rdbms是判斷該變量是否被設定,通過getString是否取到的是空值,代碼如下:

用阿裡datax從達夢同步資料到MemFireDB時踩過的坑背景下載下傳datax工具包下載下傳後解壓,進入bin目錄執行自檢腳本,檢查環境配置是否okdatax支援的資料源類型通過指令檢視配置模闆配置好load.json檔案後,開始執行同步過程排錯過程

是以此處需要将load.json中writemode這一行删掉,解決該問題。

job.setting.speed.channel] 值非法

用阿裡datax從達夢同步資料到MemFireDB時踩過的坑背景下載下傳datax工具包下載下傳後解壓,進入bin目錄執行自檢腳本,檢查環境配置是否okdatax支援的資料源類型通過指令檢視配置模闆配置好load.json檔案後,開始執行同步過程排錯過程

生成的模闆中channel設定為空字元串,而實際需要的是一個數字變量,調整為數字後解決該問題。

“exception”:"Value conversion failed

用阿裡datax從達夢同步資料到MemFireDB時踩過的坑背景下載下傳datax工具包下載下傳後解壓,進入bin目錄執行自檢腳本,檢查環境配置是否okdatax支援的資料源類型通過指令檢視配置模闆配置好load.json檔案後,開始執行同步過程排錯過程

在目的端建表是,錯誤地将applied字段設定為date類型,而資料源中的applied字段是datetime類型,在運作過程中會抛出轉換錯誤的異常。重建立表後解決該問題。

繼續閱讀