乐趣区

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

背景

在构建数据仓库时,局部业务零碎应用达梦数据库存储原始数据,当初须要通过 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/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 类型,在运行过程中会抛出转换谬误的异样。从新建表后解决该问题。

退出移动版