鉴于目前我们一些项目或poc项目中可能会遇到有使用dataX作为ETL工具实现数据同步、转换、清洗等的实际需求,以及很多人没有接触过dataX ETL工具的情况。本文档以达梦和oracle之间的简单数据同步测试来让大家简单理解和了解dataX的原理和使用。
DataX 是阿里云 DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。
为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责链接各种数据源
当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步
DataX 采用 Framework + Plugin 架构,将数据源读取和写入抽象称为 Reader/Writer 插件,纳入到整个同步框架中。有了插件,DataX 可支持任意数据源到数据源,只要实现了 Reader/Writer Plugin,官方已经实现了主流的数据源插件,比如 MySQL、Oracle、SQLServer 等,当然我们也可以开发一个 DataX 插件。
i. 配置java\Python环境变量
dataX依赖于python和java环境,需要检查当前系统环境是否匹配。
--检查java 和python环境(JAVA 1.8,python 2.7以上)
java -version
python
以下是本实验机器的java和python环境
ii. 下载上传解压datax.tar.gz 并检查安装包环境信息
dataX源码包可通过github获取 https://github.com/alibaba/DataX
tar -xvzf datax.tar.gz
cd …./datax/bin
python datax.py ../job/job.json
iii. 配置驱动
Datax默认走jdbc接口并且原生代码里面提供了很多插件以用来连接各种不同类型的数据库例如 oracle\db2\mysql\金仓等。对于没有提供原生插件支持的数据库也可以采用rdbms插件模块来进行连接。Oracle使用自带的oraclereader\oraclewriter即可,由于datax没有原生支持dm的插件因此实验采用rdbms读写模块进行。本实验需要将dmjdbc驱动复制到datax/lib (本例目录为/home/oracle/datax/lib)
检查rdbmswriter以及rdbmsreader中驱动的配置文件plugin.json,确保达梦驱动名在列表中如下图所示:
vi …../datax/plugin/reader/rdbmsreader/plugin.json
vi …../datax/plugin/writer/rdbmswriter/plugin.json
数据同步测试
i. 配置同步json文件
通过以下语句可以生成配置文件json模板,根据模板修改配置文件如下,主要是jdbc连接串,同步的表,字段的配置等等。
python datax.py --reader rdbmsreader --writer oraclewriter
python datax.py --reader oraclewriter --writer rdbmsreader
--dm2ora.json
"job": {
"content": [
{
"reader": {
"name": "rdbmsreader",
"parameter": {
"column": ["USERNAME","USER_ID","ACCOUNT_STATUS"],
"connection": [
{
"jdbcUrl": ["jdbc:dm://172.17.224.128:5236"],
"table": ["dm_etl_test"]
}
],
"password": "SYSDBA",
"username": "SYSDBA",
"where": ""
}
},
"writer": {
"name": "oraclewriter",
"parameter": {
"column": ["USERNAME","USER_ID","ACCOUNT_STATUS"],
"connection": [
{
"jdbcUrl": "jdbc:oracle:thin:@172.17.224.128:1521:orcl",
"table": ["dm_etl_test"]
}
],
"password": "oracle",
"preSql": [],
"username": "sys as sysdba"
}
}
}
],
"setting": {
"speed": {
"channel": "4"
}
}
}
}
--ora2dm.json
{
"job": {
"content": [
{
"reader": {
"name": "oraclereader",
"parameter": {
"column": ["USERNAME","USER_ID","ACCOUNT_STATUS"],
"connection": [
{
"jdbcUrl": ["jdbc:oracle:thin:@172.17.224.128:1521:orcl"],
"table": ["dm_etl_test"]
}
],
"password": "oracle",
"username": "sys as sysdba"
}
},
"writer": {
"name": "rdbmswriter",
"parameter": {
"column": ["USERNAME","USER_ID","ACCOUNT_STATUS"],
"connection": [
{
"jdbcUrl": "jdbc:dm://172.17.224.128:5236",
"table": ["dm_etl_test"]
}
],
"password": "SYSDBA",
"username": "SYSDBA"
}
}
}
],
"setting": {
"speed": {
"channel": "4"
}
}
}
}
i. 测试数据准备
达梦: create table dm_etl_test as select username,user_id,account_status,'dm2ora_test' as info from dba_users where 1=1;
Oracle: create table dm_etl_test as select username,user_id,account_status,'ora2dm_test' as info from dba_users where 1=1;
ii. 开启同步测试
--达梦到oracle
python datax.py dm2ora.json
同步结果见下图
确认oracle收到达梦库中的4条数据
--Oracle到达梦
python datax.py ora2dm.json
iii. 检查同步数据
Oracle库中加上之前达梦同步到库中的4条数据共计36条数据,再同步回达梦后总数据条数为40
文章
阅读量
获赞