摘要: 一. DataX3.0概览 ​ DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

一. DataX3.0概览

​ DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

此前已经开源DataX1.0版本,此次介绍为阿里巴巴开源全新版本DataX3.0,有了更多更强大的功能和更好的使用体验。Github主页地址:https://github.com/alibaba/DataX。

二、DataX3.0框架设计

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

三. DataX3.0插件体系

​ 经过几年积累,DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入。DataX目前支持数据如下:

类型 数据源 Reader(读) Writer(写)
RDBMS 关系型数据库 Mysql
  Oracle
  SqlServer
  Postgresql
  达梦
阿里云数仓数据存储 ODPS
  ADS  
  OSS
  OCS
NoSQL数据存储 OTS
  Hbase0.94
  Hbase1.1
  MongoDB
无结构化数据存储 TxtFile
  FTP
  HDFS

DataX Framework提供了简单的接口与插件交互,提供简单的插件接入机制,只需要任意加上一种插件,就能无缝对接其他数据源。详情请看:DataX数据源指南

四、DataX3.0核心架构

DataX 3.0 开源版本支持单机多线程模式完成同步作业运行,本小节按一个DataX作业生命周期的时序图,从整体架构设计非常简要说明DataX各个模块相互关系。

核心模块介绍:

  1. DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
  2. DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
  3. 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。
  4. 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
  5. DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0

DataX调度流程:

举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。 DataX的调度决策思路是:

  1. DataXJob根据分库分表切分成了100个Task。
  2. 根据20个并发,DataX计算共需要分配4个TaskGroup。
  3. 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。
五、DataX安装:
(1)、下载DataX源码:
[root@iZ2zeh44pi6rlahxj7s9azZ ~]# git clone git@github.com:alibaba/DataX.git

(2)、通过maven打包:
[root@iZ2zeh44pi6rlahxj7s9azZ ~]# cd  {DataX_source_code_home}
[root@iZ2zeh44pi6rlahxj7s9azZ ~]# yum install -y maven
[root@iZ2zeh44pi6rlahxj7s9azZ ~]# mvn -U clean package assembly:assembly -Dmaven.test.skip=true

打包成功,日志显示如下:

[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time: 08:12 min
[INFO] Finished at: 2015-12-13T16:26:48+08:00
[INFO] Final Memory: 133M/960M
[INFO] -----------------------------------------------------------------
打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ ,结构如下:
[root@iZ2zeh44pi6rlahxj7s9azZ ~]#  cd  {DataX_source_code_home}
[root@iZ2zeh44pi6rlahxj7s9azZ ~]#  ls ./target/datax/datax/
bin             conf            job             lib             log             log_perf

六、mysql数据传输到oracle
(1)、生成mysql到oracle的配置文件:

[root@iZ2zeh44pi6rlahxj7s9azZ bin]# python datax.py -r mysqlreader -w oraclewriter
DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2016, Alibaba Group. All Rights Reserved.
Please refer to the mysqlreader document:
https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md
Please refer to the oraclewriter document:
https://github.com/alibaba/DataX/blob/master/oraclewriter/doc/oraclewriter.md
Please save the following configuration as a json file and  use
python {DATAX_HOME}/bin/datax.py {JSON_FILE_NAME}.json
to run the job.
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [],
"connection": [
{
"jdbcUrl": [],
"table": []
}
],
"password": "",
"username": "",
"where": ""
}
},
"writer": {
"name": "oraclewriter",
"parameter": {
"column": [],
"connection": [
{
"jdbcUrl": "",
"table": []
}
],
"password": "",
"preSql": [],
"username": ""
}
}
}
],
"setting": {
"speed": {
"channel": ""
}
}
}
}

(2)、传输文件配置
[root@iZ2zeh44pi6rlahxj7s9azZ bin]# vim ../job/myor.json
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": ["id","qiye","diqu"],
"connection": [
{
"jdbcUrl": ["jdbc:mysql://[HOST_NAME]:PORT/[DATABASE_NAME]"],
"table": ["***"]
}
],
"password": "***",
"username": "***",
"where": ""
}
},
"writer": {
"name": "oraclewriter",
"parameter": {
"column": ["id","qiye","diqu"],
"connection": [
{
"jdbcUrl": "jdbc:oracle:thin:@[HOST_NAME]:PORT:[DATABASE_NAME]",
"table": ["***"]
}
],
"password": "***",
"preSql": ["delete from ceshi"],
"username": "***"
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}

(3)、执行传输过程
[root@iZ2zeh44pi6rlahxj7s9azZ bin]# python datax.py ../job/myor.json
DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2016, Alibaba Group. All Rights Reserved.
2017-09-25 20:09:01.200 [main] INFO  VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
2017-09-25 20:09:01.215 [main] INFO  Engine - the machine info  =>
osInfo:    Oracle Corporation 1.8 25.144-b01
jvmInfo:    Linux amd64 3.10.0-514.6.2.el7.x86_64
cpu num:    1
totalPhysicalMemory:    -0.00G
freePhysicalMemory:    -0.00G
maxFileDescriptorCount:    -1
currentOpenFileDescriptorCount:    -1
.
.
.
2017-09-25 20:19:12.557 [job-0] INFO  StandAloneJobContainerCommunicator - Total 1419776 records, 31164761 bytes | Speed 54.10KB/s, 2457 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 597.972s |  All Task WaitReaderTime 1.983s | Percentage 0.00%
2017-09-25 20:19:32.558 [job-0] INFO  StandAloneJobContainerCommunicator - Total 1464832 records, 32195809 bytes | Speed 50.34KB/s, 2252 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 617.847s |  All Task WaitReaderTime 2.031s | Percentage 0.00%
2017-09-25 20:19:42.559 [job-0] INFO  StandAloneJobContainerCommunicator - Total 1491456 records, 32744862 bytes | Speed 53.62KB/s, 2662 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 628.044s |  All Task WaitReaderTime 2.054s | Percentage 0.00%
2017-09-25 20:19:52.561 [job-0] INFO  StandAloneJobContainerCommunicator - Total 1516032 records, 33271617 bytes | Speed 51.44KB/s, 2457 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 637.787s |  All Task WaitReaderTime 2.076s | Percentage 0.00%

(4)、登录oracle验证传输是否成功
未传输时:
[oracle@iz2zec57gfl6i9vbtdksl1z ~]$ sqlplus ***/***
SQL*Plus: Release 11.2.0.4.0 Production on Mon Sep 25 20:11:44 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
SQL> select * from ceshi;
no rows selected

传输后:
[oracle@iz2zec57gfl6i9vbtdksl1z ~]$ sqlplus ***/***
SQL*Plus: Release 11.2.0.4.0 Production on Mon Sep 25 20:15:28 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
SQL> select count(*) from ceshi;
COUNT(*)
----------
917504

DataX参考:https://github.com/alibaba/DataX

DataX配置及使用相关推荐

  1. Datax将Oracle数据导入ElasticSearch7完成教程

    网上关于此方面的内容较少,而且比较零散,正好项目中需要对ES7做预研,所以整理出了这篇文章. ElasticSearch版本为7.13.2 分如下几个主题: 1.Datax的es导入插件elastic ...

  2. 数据迁移工具之DataX

    文章目录 一.DataX 1.DataX框架 2.DataX运行原理 二.安装DataX 1.DataX的下载安装地址 2.编译 三.配置模板 1.从Stream流到控制台 2.从MYSQL到HDFS ...

  3. 高效数据同步工具DataX的使用

    一.DataX 简介 DataX 是阿里云 DataWorks 数据集成 的开源版本,主要就是用于实现数据间的离线同步. DataX 致力于实现包括关系型数据库(MySQL.Oracle 等).HDF ...

  4. 数据同步工具之DataX实操

    一.DataX部署 上传DataX压缩文件至/opt/software/目录下,并解压文件至/opt/module/下. 自测检查DataX,出现如下截图内容,说明安装成功 二.DataX使用 Dat ...

  5. 大数据增量采集OGGAdapter的安装部署与相关配置

    大数据云时代,数据上云ETL已成了最基础,最根本,最必须的一个步骤.目前数据传输迁移的工具非常多,比如dataX,DTS,kettle等等.为了保证云上存储空间的有效利用和数据的整体唯一性,就没必要每 ...

  6. 实践练习四:迁移 MySQL 数据到 OceanBase 集群

    练习目的 本次练习目的掌握从 MySQL 向 OceanBase 迁移数据的基本方法:mysqldump.datax .canal 等. 练习内容 请记录并分享下列内容: (必选)使用 mysqldu ...

  7. 9月26日云栖精选夜读:阿里Java代码规约插件即将全球首发,邀您来发布仪式现场...

    10月14日,杭州云栖大会研发效能峰会场,阿里将正式对外开放Java代码规约插件及源码. 热点热议 阿里Java代码规约插件即将全球首发,邀您来发布仪式现场 作者:云效平台   发表在:阿里云效平台 ...

  8. 实践练习四(必选):迁移 MySQL 数据到 OceanBase 集群

    OceanBase Docker安装体验:https://www.xmmup.com/oceanbase-dockeranzhuangtiyan.html 手动部署 OceanBase 单副本集群:h ...

  9. 【离线数仓-2-数据采集】

    离线数仓-2-数据采集 离线数仓-2-数据采集 1.用户行为日志数据模拟 1.用户行为日志的介绍 2.埋点有哪些 3.用户行为日志内容 4.用户行为日志格式 5.用户行为日志数据采集 1.节点之间配置 ...

最新文章

  1. Linux学习中我的10条建议和技巧
  2. RGBD相机参数输出定义
  3. SAP MM UB类型的退货STO流程简述
  4. 万字长文!DeepMind科学家总结2021年的15个高能研究
  5. 在 Windows 上直接运行 Linux,有命令行就是贼香
  6. 可怕的DefaultAbstractHelperImpl
  7. 选择排序是外面循环的array[i]与内循环的array[j]比较。冒泡排序是内循环的相邻两个值做比较修改...
  8. 微信小程序云开发教程-云开发对微信小程序带来的变革作用
  9. AMD Catalyst 14.4 Linux带来完整的 OpenGL 4.4 支持
  10. java中重写equals方法
  11. java程卫琴_43名基层工会干部在“机关开放日”走进安徽省总工会参观并座谈
  12. 怎么在linux系统上安装软件,教你如何在Linux系统安装软件
  13. 史上最完整基于Springboot实现进销存管理系统
  14. IE8升级到IE11 F12报错的解决方案
  15. [ROC-RK3568-PC] [Firefly-Android] 10min带你了解UART的使用
  16. Bootstrap+web+Idea实现登录页面(含验证码)
  17. lstm 文本分类_带有lstm和单词嵌入的灾难推文上的文本分类
  18. 吉林省松原市谷歌高清卫星地图下载
  19. 风控模型中的KS指标
  20. 整理了一波年终总结模版,速领!

热门文章

  1. Mybatis-generator逆向生成运行正常,但没有生成任何文件
  2. Linux网络DNS配置反向解析与构建主从域名服务器
  3. Redis数据库(一)——Redis简介、部署及常用命令
  4. 异步通知和同步通知_CCF NOI 2020 网上同步赛报名通知
  5. html下拉列表插件,js+CSS实现模拟华丽的select控件下拉菜单效果
  6. ubuntu安装pr_在Ubuntu 16.04服务器上安装Zabbix 3.2
  7. so调用so 编译 android,android-5分钟入门-CMake方式使用JNI(.so调用篇)
  8. 积分上下限无穷_数学方法的思考和存在无穷多个孪生素数证明的思路
  9. matlab向量的角标,【MATLAB】利用冒号表达式获得子矩阵
  10. java对象工厂池_[转载]Java对象池技术的原理及其实现