龙空技术网

用阿里datax从达梦同步数据到MemFireDB时踩过的坑

oscube 222

前言:

眼前咱们对“达梦数据同步”可能比较看重,咱们都想要了解一些“达梦数据同步”的相关内容。那么小编同时在网摘上汇集了一些有关“达梦数据同步””的相关知识,希望兄弟们能喜欢,看官们一起来学习一下吧!

背景

在构建数据仓库时,部分业务系统使用达梦数据库存储原始数据,现在需要通过datax把数据同步到云数据库MemFireDb 中进行分析。MemFireDB是一款NewSQL数据库系统的代表,具备高并发和弹性扩展的特点,用来作为数据仓库的存储系统。过程中遇到了不少问题,在此记录一下。

下载datax工具包

wget 
下载后解压,进入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支持的数据源类型

来源:

类型

数据源

Reader(读)

Writer(写)

文档

RDBMS 关系型数据库

MySQL

读[2]写[3]

Oracle

读[4]写[5]

SQLServer

读[6]写[7]

PostgreSQL

读[8]写[9]

DRDS

读[10]写[11]

通用RDBMS(支持所有关系型数据库)

读[12]写[13]

阿里云数仓数据存储

ODPS

读[14]写[15]

ADS

写[16]

OSS

读[17]写[18]

OCS

读[19]写[20]

NoSQL数据存储

OTS

读[21]写[22]

Hbase0.94

读[23]写[24]

Hbase1.1

读[25]写[26]

Phoenix4.x

读[27]写[28]

Phoenix5.x

读[29]写[30]

MongoDB

读[31]写[32]

Hive

读[33]写[34]

Cassandra

读[35]写[36]

无结构化数据存储

TxtFile

读[37]写[38]

FTP

读[39]写[40]

HDFS

读[41]写[42]

Elasticsearch

写[43]

时间序列数据库

OpenTSDB

读[44]

TSDB

读[45]写[46]

通过命令查看配置模板

通过上表可以看到,无论是达梦数据库,还是作为同步目的的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": ""            }        }    }}

参数的说明可以看 读: 写:

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

标签: #达梦数据同步 #达梦数据同步软件