前言:
眼前咱们对“达梦数据同步”可能比较看重,咱们都想要了解一些“达梦数据同步”的相关内容。那么小编同时在网摘上汇集了一些有关“达梦数据同步””的相关知识,希望兄弟们能喜欢,看官们一起来学习一下吧!背景
在构建数据仓库时,部分业务系统使用达梦数据库存储原始数据,现在需要通过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类型,在运行过程中会抛出转换错误的异常。重新建表后解决该问题。