一、Datax概览

离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。

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

  • 设计理念

DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

二、DataX3.0框架设计

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

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

三. DataX3.0插件体系

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

https://github.com/alibaba/DataX

类型 数据源 Reader(读) Writer(写) 文档
RDBMS 关系型数据库 MySQL 读 、写
            Oracle         √         √     读 、写
SQLServer 读 、写
PostgreSQL 读 、写
DRDS 读 、写
通用RDBMS(支持所有关系型数据库) 读 、写
阿里云数仓数据存储 ODPS 读 、写
ADS
OSS 读 、写
OCS 读 、写
NoSQL数据存储 OTS 读 、写
Hbase0.94 读 、写
Hbase1.1 读 、写
Phoenix4.x 读 、写
Phoenix5.x 读 、写
MongoDB 读 、写
Hive 读 、写
Cassandra 读 、写
无结构化数据存储 TxtFile 读 、写
FTP 读 、写
HDFS 读 、写
Elasticsearch
时间序列数据库 OpenTSDB
TSDB 读 、写

四、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旧版对于部分数据类型(比如时间戳)传输一直存在毫秒阶段等数据失真情况,新版本DataX3.0已经做到支持所有的强数据类型,每一种插件都有自己的数据类型转换策略,让数据可以完整无损的传输到目的端。

  • 提供作业全链路的流量、数据量运行时监控

DataX3.0运行过程中可以将作业本身状态、数据流量、数据速度、执行进度等信息进行全面的展示,让用户可以实时了解作业状态。并可在作业执行过程中智能判断源端和目的端的速度对比情况,给予用户更多性能排查信息。

  • 提供脏数据探测

在大量数据的传输过程中,必定会由于各种原因导致很多数据传输报错(比如类型转换错误),这种数据DataX认为就是脏数据。DataX目前可以实现脏数据精确过滤、识别、采集、展示,为用户提供多种的脏数据处理模式,让用户准确把控数据质量大关!

2. 丰富的数据转换功能
DataX作为一个服务于大数据的ETL工具,除了提供数据快照搬迁功能之外,还提供了丰富数据转换的功能,让数据在传输过程中可以轻松完成数据脱敏,补全,过滤等数据转换功能,另外还提供了自动groovy函数,让用户自定义转换函数。详情请看DataX3的transformer详细介绍。

3. 精准的速度控制
还在为同步过程对在线存储压力影响而担心吗?新版本DataX3.0提供了包括通道(并发)、记录流、字节流三种流控模式,可以随意控制你的作业速度,让你的作业在库可以承受的范围内达到最佳的同步速度。

"speed": {"channel": 5,"byte": 1048576,"record": 10000
}

4. 强劲的同步性能
DataX3.0每一种读插件都有一种或多种切分策略,都能将作业合理切分成多个Task并行执行,单机多线程执行模型可以让DataX速度随并发成线性增长。在源端和目的端性能都足够的情况下,单个作业一定可以打满网卡。另外,DataX团队对所有的已经接入的插件都做了极致的性能优化,并且做了完整的性能测试。性能测试相关详情可以参照每单个数据源的详细介绍:DataX数据源指南

5. 健壮的容错机制
DataX作业是极易受外部因素的干扰,网络闪断、数据源不稳定等因素很容易让同步到一半的作业报错停止。因此稳定性是DataX的基本要求,在DataX 3.0的设计中,重点完善了框架和插件的稳定性。目前DataX3.0可以做到线程级别、进程级别(暂时未开放)、作业级别多层次局部/全局的重试,保证用户的作业稳定运行。

  • 线程内部重试
    DataX的核心插件都经过团队的全盘review,不同的网络交互方式都有不同的重试策略。
  • 线程级别重试
    目前DataX已经可以实现TaskFailover,针对于中间失败的Task,DataX框架可以做到整个Task级别的重新调度。

6. 极简的使用体验

  • 易用
    下载即可用,支持linux和windows,只需要短短几步骤就可以完成数据的传输

  • 详细
    DataX在运行日志中打印了大量信息,其中包括传输速度,Reader、Writer性能,进程CPU,JVM和GC情况等等。
    - 传输过程中打印传输速度、进度等

传输过程中会打印进程相关的CPU、JVM等

在任务结束之后,打印总体运行情况

六、dataX安装配置

  1. 系统环境windows 、linux均可,其他必须的依赖包括:

    • JDK(1.8)
    • Python(推荐Python2.6.X)
    • Apache Maven 3.x (想通过源码编译的话需要,否则直接用二进制包即可)
  2. 安装
    • 下载安装tar包(https://github.com/alibaba/DataX)
    • 解压至本地某个目录,修改权限为755,进入bin目录,即可运行样例同步作业。
      $ tar zxvf datax.tar.gz
      $ sudo chmod -R 755 {YOUR_DATAX_HOME}
      $ cd  {YOUR_DATAX_HOME}/bin
      $ python datax.py ../job/job.json

      如果一切顺利就会看到样例输出,说明工具已经就绪可以使用了。

配置文件介绍

他的全部使用就如同安装配置部分所说,仅仅是执行一个python脚本,传入一个json配置文件。我们的关键工作就是定义这个json配置。在bin目录下也已经给出了样例配置,不过针对不同的数据源还是会有些许区别。
我们可以使用如下命令查看我们具体需要的配置文件样例:

 python datax.py -r {YOUR_READER} -w {YOUR_WRITER}

比如我现在需要的是从sqlserver读入,写到mysql,那么就可以尝试:
python datax.py -r sqlservereader -w mysqlwriter
输出如下:

{"job": {"content": [{"reader": {"name": "sqlserverreader","parameter": {"connection": [{/***省略多条****/}],"column": ["*"],/***省略多条****/}},"writer": {"name": "mysqlwriter","parameter": {"column": ['*'],"connection": [{/***省略多条****/}],"password": " /***省略多条****/","username": "root","writeMode": "insert"}}}],"setting": {"speed": {"channel": "5"}}}
}
  • 大致也是非常容易理解的,配置数据库账号密码,配置同步的表名列名等等信息。
  • jdbcUrl,username,password,table,column,writeMode(insert/replace/update)等为必选项,见名知意。
  • 按照json格式填写即可,reader支持配置多个连接,只要有一个连通即可,writer只能配置一个连接。
  • 更详细的配置参考官方wiki:
    https://github.com/alibaba/DataX/wiki/DataX-all-data-channels
  • Transformer的使用见下:
    https://github.com/alibaba/DataX/blob/master/transformer/doc/transformer.md

解释:

七、DataX、Sqoop、Canal之比较

1.Sqoop与DataX

Sqoop依赖于Hadoop生态,充分利用了map-reduce计算框架,在Hadoop的框架中运行,对HDFS、Hive支持友善,在处理数仓大表的速度相对较快,但不具备统计和校验能力。

DataX无法分布式部署,需要依赖调度系统实现多客户端,可以在传输过程中进行过滤,并且可以统计传输数据的信息,因此在业务场景复杂(表结构变更)更适用,同时对于不同的数据源支持更好,同时不支持自动创建表和分区。支持流量控制,支持运行信息收集,及时跟踪数据同步情况。

Sqoop采用命令行的方式调用,比如容易与我们的现有的调度监控方案相结合,DataX采用xml 配置文件的方式,在开发运维上还是有点不方便。 Sqoop只可以在关系型数据库和Hadoop组件之间进行数据迁移,而在Hadoop相关组件之间,比如hive和hbase之间就无法使用sqoop互相导入导出数据,同时在关系型数据库之间,比如mysql和oracle之间也无法通过sqoop导入导出数据。与之相反,DataX能够分别实现关系型数据库Hadoop组件之间、关系型数据库之间、Hadoop组件之间的数据迁移。

2.Sqoop与Canal

Sqoop: 同步全量数据,能够实现对关系型数据的全量同步,但在很多业务场景下,由于数据量非常大,每天全量同步,对于Hadoop的压力较大,因此要慎用。

Canal: 主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费,只同步更新的数据。也可以配置MQ模式,配合RocketMQ或者Kafka,Canal会把数据发送到MQ的topic中,然后通过消息队列的消费者进行处理。 Canal的工作原理就是把自己伪装成MySQL slave,基于监听binlog日志去进行同步数据的。

八、DataX-Web

DataX Web是在DataX之上开发的分布式数据同步工具,提供简单易用的 操作界面。

安装要求:

  • Java 8+,maven3+
  • Python2.7(支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下)
  • Environment: MacOS, Windows,Linux
  • Database: Mysql5.7+

安装步骤(liunx为例):

1). 下载datax-web安装包 ;

2). 编译打包(官方提供的tar包跳过)

mvn clean install

执行成功后将会在工程的build目录下生成安装包,build/datax-web-{VERSION}.tar.gz ;

3). 解压build/datax-web-{VERSION}.tar.gz ;

4). 执行一键安装脚本,./bin/install.sh ;

5). 如果你的服务上安装有mysql命令,在执行安装脚本的过程中则会出现以下提醒:

按照提示输入数据库地址,端口号,用户名,密码以及数据库名称,大部分情况下即可快速完成初始化。 如果服务上并没有安装mysql命令,则可以取用目录下/bin/db/datax-web.sql脚本去手动执行,完成后修改相关配置文件 [ /modules/datax-admin/conf/bootstrap.properties]

6). 安装完成之后,在项目目录: /modules/datax-admin/bin/env.properties 配置邮件服务(可跳过), 此文件中包括一些默认配置参数,例如:server.port, python.path等,需按照注释进行配置;另外在/modules/datax-execute/bin/env.properties,也需对PYTHON_PATH进行配置,此项的值为datax.py 所在位置,建议使用绝对路径。

7). 一键启动所有服务:

./bin/start-all.sh

单一地启动某一模块服务:

./bin/start.sh -m {module_name}

8). 一键取消所有服务:

./bin/stop-all.sh

单一地停止某一模块服务:

./bin/stop.sh -m {module_name}

九、datax-web 简单使用

1)、 登录,启动服务后,打开 http://{应用服务器IP}:{端口号默认为9527/index.html

  • 用户名:admin
  • 密码 :123456

datax-web 注意事项

  • 该应用要求mysql版本 >= 5.7及以上;
  • 该应用一键部署时会默认生成一条执行器记录,如需新的执行器可自行配置;
  • 任务构建成功后,默认不开启执行调度;
  • 任务一旦生成,再进行编辑需对页面json进行修改,此时需特别注意格式和括号闭合情况;
  • 任务json配置会对数据源密码进行加密;
  • 应用的端口号可以进行修改,注意端口的开闭状态;
  • 初次进入图形化界面,需先配置datax执行器,建议手工配置,注册节点为[ip]:[port],如本机默认为127.0.0.1:9999。

DataX--异构数据源数据交换工具相关推荐

  1. 星环科技 TDS 联邦计算能力,让企业异构数据源数据合作畅通无阻

    在数据成为生产要素的今天,企业愈发需要更高效.简洁利用数据的方法来快速响应不断变化的商业和情报分析.传统方式是数据集成(ETL)后再做分析,但目前需求在变化,数据源也在变化,数据集成系统越来越庞大,导 ...

  2. Doris1.1.1多种异构数据源数据导入方案

    Doris分析型数据库 Apache Doris 是一个基于 MPP 架构的高性能.实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发 ...

  3. 阿里开源数据同步神器DataX异构数据源间数据同步同步MySQL与HDFS相互实战

    Datax 实战使用 继上一篇 阿里开源数据同步神器DataX异构数据源间数据同步基础介绍与快速入门之后的实战篇 1.MySQL-To-HDFS 环境 & 准备说明: 描述: 为了快速搭建测试 ...

  4. DataX在数据迁移中的应用

    简介:DataX在数据迁移中的应用 1. DataX定义 首先简单介绍下datax是什么. DataX是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlSe ...

  5. DataX离线数据同步工具/平台

    DataX离线数据同步工具/平台 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.SQL Server.Oracle.PostgreSQL.HDFS.Hive.O ...

  6. datax 持续数据同步_DataX数据同步

    因为选择了ElasticSearch做全文检索,需要把数据从数据库同步到es,此处选择开源方案DataX作为数据同步工具. 官方文档很详细,可以直接参考. DataXDataX 是一个异构数据源离线同 ...

  7. 多端异构数据集成方案

    概述 多端异构,一般来说这是数据集成系统最复杂的情况,而前面部分我们将讨论多端同构场景下的做法,再逐渐延伸到文章主题部分,即多端异构的场景. 多端同构 所谓多端同构,就是终端类型可以是多种,但是使用的 ...

  8. 大数据场景下多源异构数据的实时处理分析

    随着大数据应用的发展,人们对实时数据的要求越来越高,大数据也逐渐从最初的离线数据仓库架构发展到Labmda架构,实现了离线实时更新的目标.到后来的Kappa体系结构中,Labmda体系结构的实时部分被 ...

  9. 领域最全!多传感器融合方法综述!(Camera/Lidar/Radar等多源异构数据)

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[ECCV2022]获取ECCV2022所有自动驾驶方向论文! 自动 ...

最新文章

  1. python 模拟浏览器登录获取cookie_使用cookielib模拟浏览器在python中获取url
  2. 关于质量的联想:消费示范效应
  3. 华为智慧屏鸿蒙挂安卓9,荣耀先行!华为智慧屏9月发布:搭鸿蒙系统和自研芯片...
  4. Shell练习(十一)
  5. go路由httprouter中的压缩字典树算法图解及c++实现
  6. 如何才能通过一线互联网公司面试?全网疯传
  7. android 入门 (分析: 非匿名内部类 监听功能的实现)
  8. numpy.zeros(np.zeros)
  9. 数据库入门-主键和外键设置
  10. 前台登录账号改变时迅速清空记录的登录密码
  11. C 标准库 - stdio.h
  12. codeforces 918 D MADMAX 记忆化搜索
  13. 设计模式学习之—我是一个粉刷匠(装饰模式)
  14. 电脑出问题解决办法(Win7)
  15. 设置手机静音和固定电话来电时手机震动
  16. Qt QSqlQueryModel实现查询数据库内容
  17. android 指针越界,android sqlist中游标下标越界问题解决方案
  18. 10大经典数据分析模型,你知道几个?
  19. 排名:百度小程序 微信 + 支付宝 + 百度 + 头条 商城源码-拓客营销
  20. Python电子相册

热门文章

  1. 触漫机器人_触漫携手壹心理打破亲子僵局 让爱驻家守护亲子健康
  2. 深度学习/自动驾驶数据集大集合(目标检测/图像分割/语义分割/图像分类/)
  3. 20系列显卡服务器,关于20系列的DLSS
  4. python中求和符号怎么打_SymPy求和表达式中的代换符号
  5. Balsamiq Mockups的使用
  6. 贝壳找房上海研发全员被优化,公司回应来了!
  7. 干货分享:微信好友删除了怎么找回?领取超好用的恢复方法
  8. 镜子--天空16度蓝
  9. Windows11图片密码的设置方法(用喜欢的图片作为开机密码)
  10. python小案例程序安徽工程大学专用百词斩(刚接触python不喜勿喷)