离线数据同步神器:DataX,支持几乎全部异构数据源的离线同步到MaxCompute

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

概述

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

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

离线数据同步在大数据分析,数据备份,数据同步等应用场景中都会被用到,因此本文特别介绍阿里开源的这款神器:DataX!github

准备工做

  1. 环境准备:Linux服务器一台,安装有JDK8,maven和python 2.6+;sql

  2. 下载源码:https://github.com/alibaba/DataX.gitjson

  3. 解压后编译源码:mvn -U clean package assembly:assembly -Dmaven.test.skip=true服务器

出现如下信息,表示编译成功(编译时间稍长,因为DataX支持的数据源不少,对应的依赖包也比较多,因此可能须要20min左右编译时间,具体视下载速度和机器性能而定):框架

常见错误:maven

  • 在第3步可能会出现没法编译tablestore-streamclient的错误,请到https://mvnrepository.com/artifact/com.aliyun.openservices/tablestore-streamclient/1.0.0 下载相应的包并放到maven相应路径下;工具

工具使用

成功编译DataX后,在cd target/datax/datax/目录下就会生成可执行文件,咱们就能够来使用DataX同步各类格式的离线数据(具体看参考:https://github.com/alibaba/DataX/blob/master/userGuid.md),以下:

不在这个表格中的数据源格式你能够经过自定义插件编写,具体编码可参考:https://github.com/alibaba/DataX/blob/master/dataxPluginDev.md

好比咱们实现一个最简单的任务,将JSON格式化数据输出到控制台:

  1. 切换目录:cd target/datax/datax/bin,好比在咱们的192.168.1.63的服务器,切换到目录:/home/data-transfer/datax/target/datax/datax/bin

  2. 查看配置格式命令:python datax.py -r streamreader -w streamwriter

  3. 编写配置文件,stream2stream.json文件以下:

1{
 2  "job": {
 3    "content": [
 4      {
 5        "reader": {
 6          "name": "streamreader",
 7          "parameter": {
 8            "sliceRecordCount": 10,
 9            "column": [
10              {
11                "type": "long",
12                "value": "10"
13              },
14              {
15                "type": "string",
16                "value": "hello,你好,世界-DataX"
17              }
18            ]
19          }
20        },
21        "writer": {
22          "name": "streamwriter",
23          "parameter": {
24            "encoding": "UTF-8",
25            "print": true
26          }
27        }
28      }
29    ],
30    "setting": {
31      "speed": {
32        "channel": 5
33       }
34    }
35  }
36}
  1. 运行脚本:python datax.py ./stream2stream.json,执行后控制台输出:

再好比mysql到mysql的离线数据同步,可以使用:
python datax.py -r mysqlreader -w mysqlwriter 获取配置文件模板;

更多的writer可参看plugins目录下的writer文件夹(官方默认包含的Writer,支持自定义可扩展):

更多的reader可参看plugins目录下的reader文件夹(官方默认包含的Reader,支持自定义可扩展):

注:若是要使用离线增量同步数据,可指定配置文件中的where过滤;

原文连接

相关文章
相关标签/搜索