DataX3.0概览

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

  • 设计理念
    为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。
  • 开源地址
    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目前支持数据如下:

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 3.0六大核心优势

可靠的数据质量监控

  • 完美解决数据传输个别类型失真问题
    DataX旧版对于部分数据类型(比如时间戳)传输一直存在毫秒阶段等数据失真情况,新版本DataX3.0已经做到支持所有的强数据类型,每一种插件都有自己的数据类型转换策略,让数据可以完整无损的传输到目的端。
  • 提供作业全链路的流量、数据量运行时监控
    DataX3.0运行过程中可以将作业本身状态、数据流量、数据速度、执行进度等信息进行全面的展示,让用户可以实时了解作业状态。并可在作业执行过程中智能判断源端和目的端的速度对比情况,给予用户更多性能排查信息。
  • 提供脏数据探测
    在大量数据的传输过程中,必定会由于各种原因导致很多数据传输报错(比如类型转换错误),这种数据DataX认为就是脏数据。DataX目前可以实现脏数据精确过滤、识别、采集、展示,为用户提供多种的脏数据处理模式,让用户准确把控数据质量大关!

丰富的数据转换功能

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

精准的速度控制

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

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

强劲的同步性能

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

健壮的容错机制

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

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

极简的使用体验

  • 易用
    下载即可用,支持linux和windows,只需要短短几步骤就可以完成数据的传输。请点击Quick Start
  • 详细
    DataX在运行日志中打印了大量信息,其中包括传输速度,Reader、Writer性能,进程CPU,JVM和GC情况等等。

    • 传输过程中打印传输速度、进度等
    • 传输过程中会打印进程相关的CPU、JVM等
    • 在任务结束之后,打印总体运行情况

源码阅读

job的执行流程

  • preHandle:处理前的准备
  • init:reader和writer的初始化,参考MongoDBReader的init()
  • prepare:reader和writer的准备工作
  • split:执行reader和writer最细粒度的切分,需要注意的是,writer的切分结果要参照reader的切分结果,达到切分后数目相等,才能满足1:1的通道模型,所以这里可以将reader和writer的配置整合到一起。然后,为避免顺序给读写端带来长尾影响,将整合的结果shuffler掉。
  • schedule:schedule首先完成的工作是把上一步reader和writer split的结果整合到具体taskGroupContainer中,同时不同的执行模式调用不同的调度策略,将所有任务调度起来
  • post:处理完任务后的收尾工作
  • invokeHooks:调用外部hook
  • destroy:销毁工作
  • logStatistics:汇总日志统计数据

split

  • adjustChannelNumber:调整channel的数量,若有对job的byte或者record进行限制,则也需要设置channel的byte或者record。若都设置正确,则直接用job的byte/channel的byte得出需要的channel数量。否则,直接取用户设置的channel数量。
  • doReaderSplit:以mongodb为例
  • doWriteSplit:writer的切分数目与reader的一致,成1:1的通道模型。Writer的实现大部分只需在Writer.Job.split()方法中clone writer配置即可。例如:MongoDBWriter。
  • mergeReaderAndWriterTaskConfigs:按顺序合并reader和writer的配置,并注入taskId。

schedule

schedule的任务是schedule首先完成的工作是把上一步reader和writer split的结果整合到具体taskGroupContainer中,同时不同的执行模式调用不同的调度策略,将所有任务调度起来。

  • assignFairly:把task公平地分配到对应地taskGroup中,公平体现在:考虑task中对资源负载作地load表识,进行更均衡地作业分配操作。
  • initStandaloneScheduler:初始化单机模式的调度器,并设置任务容器的通信器
  • schedule:启动所有的taskGroup、收集job的状态、处理Succeed/Killing/Failed
  • 检查最终结果是否超出错误阈值,如果阈值设定小于1,则表示百分数阈值,大于1表示条数阈值
assignFairly

开发宝典

github地址:https://github.com/alibaba/DataX/blob/master/dataxPluginDev.md

LinkedBlockingQueue
限流
Process
codahale

阿里云开源离线同步工具DataX3.0相关推荐

  1. 阿里云开源离线同步工具DataX3.0介绍

    转载自:https://developer.aliyun.com/article/59373 一. DataX3.0概览 ​ DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(My ...

  2. 阿里云开源离线同步工具DataX3.0,用于数据仓库、数据集市、数据备份

    DataX是阿里云开源的一款离线数据同步工具,支持多种数据源和目的地的数据同步,包括但不限于MySQL.Oracle.HDFS.Hive.ODPS等.它可以通过配置文件来定义数据源和目的地的连接信息. ...

  3. 阿里巴巴开源离线同步工具 DataX3.0 介绍

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

  4. 开源oracle同步图形工具,阿里开源数据同步工具--DataX

    阿里开源数据同步工具--DataX 是啥?: 是异构数据源离线同步工具 能干啥?: 能够将MySQL sqlServer Oracle Hive HBase  FTP 之间进行稳定高效的数据同步. 设 ...

  5. 收藏|2021年阿里云开源镜像站最热门镜像王全梳理(附下载链接和Top20镜像王排名)

    阿里云开源镜像站的初衷在于宣传自由软件的价值,提高大家的开发效率,帮助大家更快地进行应用创建. 全面.快速.稳定.可信 作为程序员肯定要和开源软件打交道,很多情况需要用到相关的代码库,而依赖和软件包的 ...

  6. 阿里云开源EasyTransfer:业界首个面向NLP场景深度迁移学习框架

    阿里云开源EasyTransfer:业界首个面向NLP场景深度迁移学习框架 原文链接:https://zhuanlan.zhihu.com/p/267392773 阿里云正式开源了深度迁移学习框架 E ...

  7. 首次公开,阿里云开源PolarDB总体架构和企业级特性

    简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家北侠带来了主题为<PolarDB 总体架构设计和企业级特性>的精彩演讲. 在3月2日的 ...

  8. 详细解读阿里云开源PolarDB总体架构和企业级特性

    在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家 北侠带来了主题为<PolarDB 总体架构设计和企业级特性>的精彩演讲.主要分享了存储计算 ...

  9. 收藏|2021年阿里云开源镜像站最热门镜像王全梳理 (附下载链接和Top20镜像王排名)

    阿里云官方镜像站:https://developer.aliyun.com/mirror/?utm_content=g_1000307095 简介: 阿里云开源镜像站的初衷在于宣传自由软件的价值,提高 ...

最新文章

  1. Query String Object 2.1.7
  2. Identity Server 4 原理和实战(完结)_建立Identity Server 4项目,Client Credentials 授权实例...
  3. LeetCode 算法 856. 括号的分数
  4. 人工神经网络_验证码破译(数据挖掘入门与实践-实验9)
  5. 手指甲上的月牙辨健康,月牙会“丢”也能“长回来”
  6. Intellij Java注释模板
  7. 两篇 Spring 总结(一)
  8. 【maven配置】IDEA自动生成的pom文件报错:URI Is Not Registered
  9. 电脑版微信怎么看朋友圈_电脑上也可以看朋友圈,99%的人都不知道!
  10. js中数组常用逻辑算法(从大到小,从小到大排序,去重等问题)
  11. 鸟哥惠新宸:PHP 7.1 的新特性我并不是很喜欢
  12. Entry name ‘org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt’ collided
  13. 【今日爆点】华为HDC开发者大会上正式发布深度欧拉V1.0
  14. 模具设计分型面创建的10大原则
  15. 2023年CISSP考点及预约时间参考
  16. 基础条件查询 where
  17. java ee字体_[分享] 23种漂亮的字体代码,
  18. bzoj 1415 [Noi2005]聪聪和可可
  19. html字体颜色反色,HTML5:画布上的反色文本颜色
  20. 区块链人才有多吃香?这些城市,为了抢人各显神通

热门文章

  1. 专业分享:“以数治税”金税四期背景下,企业税务风控与管理的思考
  2. 内网渗透系列:内网信息搜集方法小结2
  3. 责任链模式(Chain of Responsibility Pattern)简介
  4. 文档流,浮动,定位的区别和处理
  5. 为编程而生的字体(附网盘下载链接),Pycharm神器级插件 ^_^ 效率提升利器
  6. Android实现app启动页面设计
  7. Neo4j:BBC冠军联赛图表
  8. mysql 对表修改_MySQL对表的复制,修改及删除
  9. c语言e1 e2 e3,樱花燃气热水器常见毛病代码,从E1 E2 E3 E4 E5 E6的解决方法!如燃气阀体内橡胶薄膜变形...
  10. 【shell】电信免费200M一键提速脚本 转载