DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台。
Alibaba DataX调研使用
https://blog.csdn.net/aWDac/article/details/80822233
[推荐]DataX实战应用
https://blog.csdn.net/u010429286/article/details/82356121
DataX使用指南
参考URL: https://yq.aliyun.com/articles/71063
DataX是由Alibaba开源的一款异构数据同步工具,可以在常见的各种数据源之间进行同步,并仅依赖Java环境,具有轻量、插件式、方便等优点,可以快速完成同步任务。一般公司的数据同步任务,基本可以满足。
DataX是一个高可用的数据同步工具,稳定性强,速度快,上手快。
参考DataX的官方说明:
User Guide
https://github.com/alibaba/DataX/blob/master/userGuid.md
DataX-Introduction
https://github.com/alibaba/DataX/blob/master/introduction.md
插件开发宝典
https://github.com/alibaba/DataX/blob/master/dataxPluginDev.md
运行原理介绍:
工作流程大概就是用Reader模块从源数据库读数据,在Storage模块里将Reader模块读到的数据交换给Write模块,Write模块将数据写进目的数据库。
DoubleQueue:
设立两块空间,一个存储源数据,一个存储目标数据。在开始,空间A和空间B都是空的,loading 任务从源数据库向A空间加载数据,A空间满后再向B空间加载数据,同时dumping任务将A空间数据转储到目的数据库。A空间清空后,交换AB两者的任务,即A空间的任务换成loading,B空间的任务换成dumping。不断重复上述操作。
[推荐]DataX实战应用
https://blog.csdn.net/u010429286/article/details/82356121
基于datax的数据同步平台
参考URL: http://www.cnblogs.com/huangxiaoxue/p/9392817.html
ETL工具–DataX3.0实战
参考URL: http://blog.51cto.com/daisywei/1903085
DataX插件分为Reader和Writer两类。Reader负责从数据源端读取数据到Storage(交换空间),Writer负责将Storage中的数据写入到数据目的端。Storage可以适配不同种类的Reader和Writer,从而实现数据同步.
目前DataX版本已经提供的Reader插件如下:
1、 hdfsreader : 支持从hdfs文件系统获取数据。
2、mysqlreader: 支持从mysql数据库获取数据。
3、 sqlserverreader: 支持从sqlserver数据库获取数据。
4、 oraclereader : 支持从oracle数据库获取数据。
5、 streamreader: 支持从stream流获取数据(常用于测试)
6、httpreader : 支持从http URL获取数据。
提供的Writer插件如下:
1、 hdfswriter :支持向hdbf写入数据。
2、 mysqlwriter :支持向mysql写入数据。
3、 sqlserverwriter:支持向sqlserver写入数据。
4、 oraclewriter :支持向oracle写入数据。
5、 streamwriter :支持向stream流写入数据。(常用于测试)
DataX 3.0每一种读插件都有一种或多种切分策略,都能将作业合理切分成多个Task并行执行,单机多线程执行模型可以让DataX速度随并发成线性增长。 在源端和目的端性能都足够的情况下,单个作业一定可以打满网卡。
更多实际应用结合DataX Transformer在数据同步、传输过程中,存在用户对于数据传输进行特殊定制化的需求场景,包括裁剪列、转换列等工作,可以借助ETL的T过程实现(Transformer)。DataX包含了完成的E(Extract)、T(Transformer)、L(Load)支持。
tar zxvf datax.tar.gz
chmod -R 755 datax
cd datax/bin
#会给你返回json模板格式
python datax.py -r mysqlreader -w mysqlwriter
#python datax.py ../job/job.json
其中,job.json是自带的一个例子配置文件,没什么具体用途。
DataX使用指南——ODPS to ODPS
参考URL: https://yq.aliyun.com/articles/71063
DataX调优要分成几个部分,任务机指运行Datax任务所在的机器。
DataX源码打包编译采坑记
参考URL: https://blog.csdn.net/qq_32447301/article/details/82909326
编译根pom报错整理
com.aliyun.odps
odps-sdk-core
0.20.7-public
注意这里使用odps-sdk-core关键字搜到2个pom: reader、writer都需要改。
com.aliyun.openservices
tablestore-streamclient
1.0.0
参考URL: https://www.codercto.com/a/45069.html
Datax需要解决的另一个难题在于增量更新。
首先需要说明, Datax本身在大部分reader插件中提供了where配置项,用于做增量更新。例如mysqlerader md文件说明如下:
* **where**
* 描述:筛选条件,MysqlReader根据指定的column、table、where条件拼接SQL,并根据这个SQL进行数据抽取。在实际业务场景中,往往会选择当天的数据进行同步,可以将where条件指定为gmt_create > $bizdate 。注意:不可以将where条件指定为limit 10,limit不是SQL的合法where子句。
where条件可以有效地进行业务增量同步。如果不填写where语句,包括不提供where的key或者value,DataX均视作同步全量数据。
* 必选:否
* 默认值:无
* **querySql**
* 描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id
`当用户配置querySql时,MysqlReader直接忽略table、column、where条件的配置`,querySql优先级大于table、column、where选项。
* 必选:否
* 默认值:无
有一些场景,where配置满足不了,使用querySql配置:
如在数据清洗过程中,我们通常需要去join一些维度表以便过滤脏数据。所以,我们更多时候会使用querySql配置项:
不过由于每次数据同步的增量条件是不同的,可以通过自己编写代码来动态修改job任务,以便达到增量更新。
[推荐]浅谈增量数据的四种抽取模式
参考URL: https://blog.csdn.net/mochou111/article/details/80995156
什么是数据抽取 --全量抽取、增量抽取
参考URL: https://blog.csdn.net/yangtongli2012/article/details/51725408
基于全量对比得出增量数据
增量数据即DML操作,无非I(INSERT),D(DELETE),U(UPDATE)三种,故可以拿昨天的全量数据与今天的全量数据进行对比得出昨天的增量,具体方法是通过关联表的主键,唯一键用left join,right join,inner join 等对比出增量数据
优点:因为是云上merge对比,所以对源库无影响
缺点:这个操作仅仅适合表有主键,唯一键或者数据量较小的表,不然海量数据中每条数据的每一列都进行逐一比对,很显然这种频繁的I/O操作以及复杂的比对运算会造成很大的性能开销。
基于日志文件读取增量数据
这种方式可以通过读取数据库的归档日志等得到增量数据,然后在目标库或者文档服务器里进行操作
优点:可以做到数据无误差传输,有回滚机制,有容灾备份的能力
缺点:开归档会对源端数据库的磁盘造成压力,增加储存成
基于建触发器生成增量数据
触发器的概念我们都知道,故我们可以建立IDU三种操作的触发器,并由触发器将变更的数据写到库里的临时表里,然后用ETL工具直接抽取这张临时表即可进行增量上云
优点:是数据库本身的触发器机制,契合度高,可靠性高,不会存在有增量数据未被捕获到的现象
缺点:对于源端有较大的影响,需要建立触发器机制,增加运维人员,还要建立临时表,储存临时表,增加储存成本和运维成本
基于时间字段切分增量数据
此方法依据表的某一时间字段,在etl工具里进行条件设定即可快速抽取增量数据
优点:数据处理逻辑清楚,速度较快,成本低廉,流程简单
缺点:此方法要求表的时间字段必须是随表变动而变动的不为空数据,此外由于是直接读取表数据,该方法无法获取删除类型的数据。
总结:
数据同步工具otter(二)
参考URL: https://blog.csdn.net/frog4/article/details/81613025
数据同步工具otter(一)谈谈binlog和canal
参考URL: https://blog.csdn.net/frog4/article/details/80280149
基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统;
Otter基于数据库增量日志解析,支持mysql/oracle数据库进行
otter是一个基于canal的数据同步平台,含义是水獭,主要的功能就是可以将mysql的数据同步至另外mysql或者oracle,在项目中应用场景主要是多数据中心、BI系统抽取数据、灾备。
另外也支持双向同步(即A库同步给B库,B库也同步给A库)、文件同步,
在canel的基础上做了一个mysql的同步平台(带WEB管理界面),在界面上,你可以定义相应的映射规则,otter进程就会根据你定义的规则读取binlog,并更新到目标库中去。
github的地址:https://github.com/alibaba/otter
原理如下:
异构库同步
Otter支持从Mysql同步到Mysql/oracle,我们可以把mysql同步到oracle
单机房同步
可以作为一主多从同步方案,对于单机房内网来说效率非常高,还可以做为数据库版本升级,数据表迁移,二级索引等这类功能
异地机房同步
异地机房同步可以说是Otter最大的亮点之一,可以解决国际化问题把数据从国内同步到国外来提供用户使用,在国内场景可以做到数据多机房容灾
双向同步
双向同步是在数据同步中最难搞的一种场景,Otter可以很好的应对这种场景,Otter有避免回环算法和数据一致性算法两种特性,保证双A机房模式下,数据保证最终一致性
文件同步
站点镜像,进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片
定位不同,datax主要是解决离线全量同步,通过select语句或者dump指令提取数据,然后同步到目标,数据仓库典型用法。
DataX不适合实时数据同步或太频繁的定时同步,因为同步都需要去读取源表,频率过大对源表会造成压力。
canal&otter,主要是解决准实时同步,通过解析数据库日志,然后同步到目标,网站前台的典型用法。
SymmetricDS是一个文件和数据库同步软件,开源的,支持多主复制,同步时过滤和在异构的网络环境中进行数据转换传输。它支持单向和双向上的多个订阅者,异步的数据复制。
SymmetricDS,利用数据库的触发器捕捉数据库变化来实现数据库同步,可以有两个节点或多个节点,可实现同服务器不同数据库同步或不同服务器数据库同步。
两者功能是差不多。
网上的一些描述如下:
otter的第三个版本是基于SymmetricDS 2.x版本发展出来,正是因为有了这层关系,两者才有一些相似。
这次开源的为otter的第四个版本,从2011年开始开发,和SymmetricDS几个不同点:
基于log-based的方案,对于数据库的影响相对较少,同时可精确提取具体变更的字段,做到按需同步,而SymmetricDS基于trigger的方式,只能提取到变更的pk,每次同步时基于pk反查源库提取到行记录。从性能上来说,按字段同步传输量和数据库载入上都有很大的优势,从数据冲突上来说,冲突粒度更小了,有利于冲突处理方案的执行。
可以说下,otter3和otter4的性能对比,基本上是一个数量级上的提升,otter3的基于trigger,然后根据pk反查的,处理tps基本只在5001000tps,而基于log-based,基于字段同步的可以达到500010000tps.
SymmetricDS有一个比较大的优势就是支持的数据库的比较多,这也是基于log-based所无法超越的,因为完成一个log-based不是那么简单的,代价很高,也就是最近1,2年才陆续有mysql的log-based出现,而oracle的log-based基本上的价格就是一个oracle的价格。
Otter与你们的Datax有多大区别?
参考URL: https://www.iteye.com/topic/1131759?page=2