异构数据库数据同步工具DataX教程,安装、数据同步、java执行

前言

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。

DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。

安装

一、下载

GitHub方式:https://github.com/alibaba/DataX

或者

直接点击这里进行下载

二、解压

注意: dataX需要在jdk1.8Python2.0以上运行
查询jdk

# java -version

查询Python

# python --version
  1. 我把刚刚下载的压缩文件放在了/usr/local/datax在这里插入图片描述
  2. 解压到/opt/software
# tar -zxvf datax.tar.gz -C /opt/software

在这里插入图片描述

三、验证解压
# bin/datax.py job/job.json

在这里插入图片描述

安装完成。

数据同步

这里我以从SqlServer数据库中的一张表数据同步到MySQL中为例讲解一下数据同步功能。

一、datax.py

首先需要说明一下这里的操作原理,建议看一下方便理解。如果想直接实操的可以跳过【一、】这个步骤。

在刚刚我们执行的# bin/datax.py job/job.json命令中分为两个步骤,第一个是启动名为datax.pyPython脚本。第二个是通过datax.py脚本来执行一个job.json文件。

datax.py脚本就不多说了,大家可以打开自己看看。主要我们要知道的是job.json文件,该文件也是我们用于进行数据同步功能的主要配置文件。

job.json文件内容:

{
	"content":[
		{
			"reader":{
				"name":"streamreader",
				"parameter":{
					"column":[
						{
							"type":"string",
							"value":"DataX"
						},
						{
							"type":"long",
							"value":19900604
						},
						{
							"type":"date",
							"value":"1990-06-04 00:00:00"
						},
						{
							"type":"bool",
							"value":true
						},
						{
							"type":"bytes",
							"value":"test"
						}
					],
					"sliceRecordCount":100000
				}
			},
			"writer":{
				"name":"streamwriter",
				"parameter":{
					"encoding":"UTF-8",
					"print":false
				}
			}
		}
	],
	"setting":{
		"errorLimit":{
			"percentage":0.02,
			"record":0
		},
		"speed":{
			"byte":10485760
		}
	}
}

解析(个人理解,非官方语言)

content: 一个执行同步的单元,里面包含读与写操作。
writer: 写操作的配置信息
reader:读操作的配置信息
parameter: 读操作中的数据源
sliceRecordCount:读取的数据条数
name:官方描述为数据插件。其实就是使用每一种类型数据库时调用的包也是GitHub页面中这些插件包。
在这里插入图片描述
咱们现在使用的就是我标红的这两个,如果需要使用其他数据源比如MySQL和SqlServer,就需要替换相对应的插件包,我们可以在GitHub中找到该包的写入与写出代码

在这里插入图片描述

speed:这里面有个channel 参数为整数,代表并发数量
在这里插入图片描述

setting: 对上面执行单元的基本设置

看完上面配置文件的解释大家应该可以明白,数据同步的规则就是配置一个读入数据源一个写出数据源,执行之后即可进行数据同步。

二、准备数据
  1. 在一个SqlServer中创建数据名称为datax_read

在这里插入图片描述
ps:这张表中ID需要为主键

  1. 在一个MySQL中创建一个结构相同的表

在这里插入图片描述

三、编写job.json文件
  1. 回到用户文件下创建json文件夹
    在这里插入图片描述2. 进入json文件夹创建steamSqlServerMysql.json
    在这里插入图片描述
    内容如下(账号密码地址请替换成你自己的数据库):
{
	"job": {
		"content": [{
			"reader": {
				"name": "sqlserverreader",
				"parameter": {
					"username": "root",
					"password": "root",
					"column": [
						"ID",
						"WTDBH"
					],
					"splitPk": "ID",
					"connection": [{
						"table": [
							"ERP_CGDD"
						],
						"jdbcUrl": [
							"jdbc:sqlserver://172.16.156.200:1433;DatabaseName=datax_read"
						]
					}]
				}
			},
			"writer":{
                    "name": "mysqlwriter",
                    "parameter": {
                        "writeMode": "insert",
                        "username": "root",
                        "password": "root",
                        "column": [
                            "ID",
                            "WTDBH"
                        ],
                        "session": [
                        	"set session sql_mode='ANSI'"
                        ],
                        "preSql": [
                            "delete from erp_cgdd"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://172.16.156.201:3306/datax_writer?useUnicode=true&characterEncoding=utf-8",
                                "table": [
                                    "erp_cgdd"
                                ]
                            }
                        ]
                    }
                }
		}],
		"setting": {
			"speed": {
				"channel": "1"
			}
		}
	}
}

SqlServer读取插件中字段的解释:点击这里

MySQL写入插件中字段的解释:点击这里

四、执行同步操作
# /opt/software/datax/bin/datax.py ./steamSqlServerMysql.json

在这里插入图片描述

查询结果

在这里插入图片描述

数据同步功能完成!

java通过调用Python脚本执行DataX

原理实际上没区别,直接用java输入刚刚自己在命令行中输入的命令即可

下面代码是java执行Linux命令

try {
            String[] cmd = new String[] { "/bin/sh", "-c", "/opt/software/datax/bin/datax.py ./steamSqlServerMysql.json" };
            Process ps = Runtime.getRuntime().exec(cmd);
 
            BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
            StringBuffer sb = new StringBuffer();
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line).append("\n");
            }
            String result = sb.toString();
 
            logger.info(result);
 
        } catch (Exception e) {
            logger.error("----error-----");
            e.printStackTrace();
        }

如果觉得有帮助的话给个免费的点赞吧,Thanks♪(・ω・)ノ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值