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