阿里云开源离线同步工具DataX3.0
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各个模块相互关系。
核心模块介绍
- DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
- DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
- 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。
- 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
- DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0。
DataX调度流程
举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。 DataX的调度决策思路是:
- DataXJob根据分库分表切分成了100个Task。
- 根据20个并发,DataX计算共需要分配4个TaskGroup。
- 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相关推荐
- 阿里云开源离线同步工具DataX3.0介绍
转载自:https://developer.aliyun.com/article/59373 一. DataX3.0概览 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(My ...
- 阿里云开源离线同步工具DataX3.0,用于数据仓库、数据集市、数据备份
DataX是阿里云开源的一款离线数据同步工具,支持多种数据源和目的地的数据同步,包括但不限于MySQL.Oracle.HDFS.Hive.ODPS等.它可以通过配置文件来定义数据源和目的地的连接信息. ...
- 阿里巴巴开源离线同步工具 DataX3.0 介绍
一. DataX3.0概览 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳定 ...
- 开源oracle同步图形工具,阿里开源数据同步工具--DataX
阿里开源数据同步工具--DataX 是啥?: 是异构数据源离线同步工具 能干啥?: 能够将MySQL sqlServer Oracle Hive HBase FTP 之间进行稳定高效的数据同步. 设 ...
- 收藏|2021年阿里云开源镜像站最热门镜像王全梳理(附下载链接和Top20镜像王排名)
阿里云开源镜像站的初衷在于宣传自由软件的价值,提高大家的开发效率,帮助大家更快地进行应用创建. 全面.快速.稳定.可信 作为程序员肯定要和开源软件打交道,很多情况需要用到相关的代码库,而依赖和软件包的 ...
- 阿里云开源EasyTransfer:业界首个面向NLP场景深度迁移学习框架
阿里云开源EasyTransfer:业界首个面向NLP场景深度迁移学习框架 原文链接:https://zhuanlan.zhihu.com/p/267392773 阿里云正式开源了深度迁移学习框架 E ...
- 首次公开,阿里云开源PolarDB总体架构和企业级特性
简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家北侠带来了主题为<PolarDB 总体架构设计和企业级特性>的精彩演讲. 在3月2日的 ...
- 详细解读阿里云开源PolarDB总体架构和企业级特性
在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家 北侠带来了主题为<PolarDB 总体架构设计和企业级特性>的精彩演讲.主要分享了存储计算 ...
- 收藏|2021年阿里云开源镜像站最热门镜像王全梳理 (附下载链接和Top20镜像王排名)
阿里云官方镜像站:https://developer.aliyun.com/mirror/?utm_content=g_1000307095 简介: 阿里云开源镜像站的初衷在于宣传自由软件的价值,提高 ...
最新文章
- Query String Object 2.1.7
- Identity Server 4 原理和实战(完结)_建立Identity Server 4项目,Client Credentials 授权实例...
- LeetCode 算法 856. 括号的分数
- 人工神经网络_验证码破译(数据挖掘入门与实践-实验9)
- 手指甲上的月牙辨健康,月牙会“丢”也能“长回来”
- Intellij Java注释模板
- 两篇 Spring 总结(一)
- 【maven配置】IDEA自动生成的pom文件报错:URI Is Not Registered
- 电脑版微信怎么看朋友圈_电脑上也可以看朋友圈,99%的人都不知道!
- js中数组常用逻辑算法(从大到小,从小到大排序,去重等问题)
- 鸟哥惠新宸:PHP 7.1 的新特性我并不是很喜欢
- Entry name ‘org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt’ collided
- 【今日爆点】华为HDC开发者大会上正式发布深度欧拉V1.0
- 模具设计分型面创建的10大原则
- 2023年CISSP考点及预约时间参考
- 基础条件查询 where
- java ee字体_[分享] 23种漂亮的字体代码,
- bzoj 1415 [Noi2005]聪聪和可可
- html字体颜色反色,HTML5:画布上的反色文本颜色
- 区块链人才有多吃香?这些城市,为了抢人各显神通
热门文章
- 专业分享:“以数治税”金税四期背景下,企业税务风控与管理的思考
- 内网渗透系列:内网信息搜集方法小结2
- 责任链模式(Chain of Responsibility Pattern)简介
- 文档流,浮动,定位的区别和处理
- 为编程而生的字体(附网盘下载链接),Pycharm神器级插件 ^_^ 效率提升利器
- Android实现app启动页面设计
- Neo4j:BBC冠军联赛图表
- mysql 对表修改_MySQL对表的复制,修改及删除
- c语言e1 e2 e3,樱花燃气热水器常见毛病代码,从E1 E2 E3 E4 E5 E6的解决方法!如燃气阀体内橡胶薄膜变形...
- 【shell】电信免费200M一键提速脚本 转载