datax 使用 DM
1、前言
目前 GitHub 上的 DataX3.0 开源版本,rdbms 里面默认是达梦7的驱动,因此,如果链接达梦8需要替换驱动。
2 驱动替换
下载
Dm8JdbcDriver18-xxxx.jar
,放到libs下面(rdbmsreader和rdbmswriter同理)
修改 maven 依赖,注释dm7的驱动,改成达梦 8 的驱动
1
2
3
4
5
6
7
8
9
10
11
12
13<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm8JdbcDriver18</artifactId>
<version>8.1.1.49</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/libs/Dm8JdbcDriver18-8.1.1.49.jar</systemPath>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.dm</groupId>-->
<!-- <artifactId>dm</artifactId>-->
<!-- <scope>system</scope>-->
<!-- <systemPath>${basedir}/src/main/libs/Dm7JdbcDriver16.jar</systemPath>-->
<!-- </dependency>-->1
2
3
4
5
6
7
8
9<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>Dm8JdbcDriver18</artifactId>
<version>8.1.1.49</version>
</dependency>
</dependencies>
</dependencyManagement>重点:同时需要将驱动的jar包复制到
../lib/
目录中。注意这里和官方 github 的描述不一致,官方 github 描述的是要将jar包复制到../plugin/writer/rdbmswriter/libs/
中,如果是拷贝到这个目录中,仍然会有上述错误。
通过查看datax.py
文件,发现 class_path 设置的是../lib
目录,如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17def is_windows():
"""
@brief : 判断系统是否为win
Returns:
"""
return platform.system() == 'Windows'
DATAX_HOME = os.environ.get('LOCAL_DATAX_HOME', None)
if not DATAX_HOME:
DATAX_HOME = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if is_windows():
codecs.register(lambda name: name == 'cp65001' and codecs.lookup('utf-8') or None)
CLASS_PATH = ("%s/lib/*") % (DATAX_HOME)
else:
CLASS_PATH = ("%s/lib/*:.") % (DATAX_HOME)如果不做这步,会报
No suitable driver found
的错误重新打包编译
1
mvn -U clean package assembly:assembly -Dmaven.test.skip=true
3、读写达梦8的任务模板json
从达梦8读取写入到MySQL5.7模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51{
"job": {
"setting": {
"speed": {
"channel": 3
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "rdbmsreader",
"parameter": {
"column": ["ID","USERNAME","PASSWORD"],
"connection": [
{
"jdbcUrl": ["jdbc:dm://10.252.xx.xxx:15236?schema=SYSDBA"],
"table": ["TEST_DATAX"]
}
],
"password": "",
"username": "SYSDBA"
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"print":true,
"column": [
"id",
"username",
"password"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://10.252.xxx.xx:30006/test_datax_dm?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai",
"table": ["test_datax"]
}
],
"password": "",
"username": "root"
}
}
}
]
}
}从MySQL5.7读取写入到达梦8模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56{
"job": {
"setting": {
"speed": {
"channel": 3
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "",
"column": [
"id",
"username",
"password"
],
"connection": [
{
"table": [
"test_datax"
],
"jdbcUrl": [
"jdbc:mysql://10.252.xxx.xx:30006/test_datax_dm?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
]
}
]
}
},
"writer": {
"name": "rdbmswriter",
"parameter": {
"column": ["ID","USERNAME","PASSWORD"],
"connection": [
{
"jdbcUrl": "jdbc:dm://10.252.xx.xxx:15236?schema=SYSDBA",
"table": ["TEST_DATAX"]
}
],
"password": "",
"username": "SYSDBA",
"preSql": [],
"session": []
}
}
}
]
}
}
报错
1 |
|
- 报错原因分析:
- 用户名密码错误
- mysqlwriter 中 jdbc 数据库地址格式应该是 String 类型,不应该定义为 List 类型
"name": "mysqlreader"
。name 要和使用的数据库相对应。程序是读到这个 name 的值,才去 plugin 中找对应的文件夹名字,进而读取数据库驱动。- 未将对应的包放入到
lib
目录。
- 解决方法:
- 检查用户名密码,连接地址是否正确
- job.json 的 writer 中的 jdbcUrl 不能使用
[]
扩起来,因为写入的数据库只能有一个
Reference
datax 使用 DM
https://flepeng.github.io/041-国产-DM-达梦数据库-31-开发指南-datax-使用-DM/