背景

在构建数据仓库时,局部业务零碎应用达梦数据库存储原始数据,当初须要通过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

如果屏幕打印未有异样,则环境配置失常,否则查看运行环境是否满足上面要求

LinuxJDK(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/Da...
写:https://github.com/alibaba/Da...

配置好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类型,在运行过程中会抛出转换谬误的异样。从新建表后解决该问题。