DataX在数据迁移中的应用
简介: DataX在数据迁移中的应用
1. DataX定义
首先简单介绍下datax是什么。
DataX是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。
2. DataX 商业版本
阿里云DataWorks数据集成是DataX团队在阿里云上的商业化产品,致力于提供复杂网络环境下、丰富的异构数据源之间高速稳定的数据移动能力,以及繁杂业务背景下的数据同步解决方案。目前已经支持云上近3000家客户,单日同步数据超过3万亿条。DataWorks数据集成目前支持离线50+种数据源,可以进行整库迁移、批量上云、增量同步、分库分表等各类同步解决方案。2020年更新实时同步能力,支持10+种数据源的读写任意组合。提供MySQL,Oracle等多种数据源到阿里云MaxCompute,Hologres等大数据引擎的一键全增量同步解决方案。
关于datax的git地址,可参考文后资料了解详情[1]。
2.1 应用案例
接下来介绍下我们在两个项目上的应用案例。
2.1.1 案例一 通过datax协助分析数据同步链路
客户某oracle数据库在迁移上云过程中,使用了某封装好的产品,但是传输效率一直很低,只有6M/s。客户一直怀疑是云内vpc网络瓶颈或rds数据库瓶颈导致,但是实际上,云内网络以及数据库整体处于非常低的负载状态。
由于客户侧的传输工具我们不方便直接拿来测试,所以在ecs上临时部署了datax,来做分析和对照测试;
测试结果如下图所示。
常用的优化参数介绍如下:
1.通道(channel)--并发
- 通过测试可知,channel的设置对传输效率的影响较为明显,上述实验中,所有设置为1的,即没有并发的情况下,同步速度均为8.9M/s;将该设置调高之后,速率明显倍增,但增大到一定程度后,瓶颈点就转到其他配置了;
2.切片(splitpk)
Git官方介绍如下:
- 描述:MysqlReader进行数据抽取时,如果指定splitPk,表示用户希望使用splitPk代表的字段进行数据分片,Datax因此会启动并发任务进行数据同步,这样可以大大提高数据同步的效能。
- 推荐splitPk用户使用表主键,因为表主键通常情况下比较均匀,因此切分出来的分片也不容易出现数据热点。
目前splitPk仅支持整形数据切分,不支持浮点、字符串、日期等其他类型。如果用户指定其他非支持类型,MysqlReader将报错。
如果splitPk不填写,包括不提供splitPk或者splitPk值为空,DataX视作使用单通道同步该表数据。 - 必选:否
- 默认值:空
实际上,由测试结果可知,切片是要配合channel来使用的,如果只开了splitpk,但是channel的配置为1,同样不会有并发的效果;
3.Batchsize
Git官方介绍如下:
- 描述:一次性批量提交的记录数大小,该值可以极大减少DataX与Mysql的网络交互次数,并提升整体吞吐量。但是该值设置过大可能会造成DataX运行进程OOM情况。
- 必选:否
- 默认值:1024
现场的实际测试效果不明显,主要原因是数据量较小,1c1g配置时,适当提高batch可以提升同步速度。
其他还有很多参数,有待小伙伴们去逐一发掘,或者下次我们用到再给大家分享;
由测试结果可知,项目使用的工具只能同步6m的速率,肯定是远远不足的,性能瓶颈既不在网络上,也不在数据库上,我们只做了部分测试,就发现4c16g的数据库轻轻松松就能达到27M的同步速率。
2.1.2 案例二 datax在数据同步实战中的应用
该案例是客户两朵云之间的数据迁移,客户新建了一朵云,需要把前一朵云上的数据迁移过去;
方案如下:
2.2 部署方式
Datax本身无自动集群化部署,需要逐台手工部署;
15台v2的物理机,空余内存均在150G左右。(因为V2集群即将下线,上述产品无业务,所以利用了闲置的物理机,在物理条件不具备时,可以采用ecs或其他虚拟机。)
机器要求:同步任务启动会占用较多内存,测试平均1个任务占用10G内存(大表);
单台150G内存可以支持15个并发任务;
2.3 同步方式
2.3.1 数据特点
分类项目数总数据量1T以上project7个97T1T以下project77个15T
- 历史记录表:历史数据,项目数不多,但占用了80%以上的空间;
- 维表+临时表:项目数多,表较小,占用空间占比小;
- 数据特点:客户几十个部门分析报表,小表分区比较多,大表相对少一些;
2.3.2 同步顺序
先同步大表,然后再同步小表;
业务没有同步顺序要求,小表易变,大表稳定,因此优先同步大表;
大表同步需要的手动配置少,也适合前期做好调试;(正式启动同步前的测试不要选太大的表,建议10G-50G,可以测出效率和压力。)
- 优点:机器多,并发高,可以快速压到瓶颈,提升整体同步效率;
- 缺点:Datax为原生的迁移工具,不具备自动化能力,需要人工大量的配置同步任务;
注:建议预留几台机器专门用于多分区小表的同步,剩余其他机器同步大表。
2.4 总结
综上所述,Datax的优势非常明显:
- 首先,部署非常简单,无论是在物理机上或者虚拟机上,只要网络通畅,便可进行数据同步,给实施人员带来了极大的便利,不受标准数据同步产品部署的条框限制;
- 再者,它是开源产品,几乎没有成本;
但是,它的缺点也是显而易见的:
- 开源工具更多的是提供基础能力,并不具备任务管理,进度跟踪、校验等等一系列的功能,只能使用者自己通过脚本或者表格记录,目前暂无白屏;因此注定了它只能作为临时性质的数据同步工具去使用;
所以,业务上有一些规范化管理或者标准化运维的需求时,或者有频繁的、持续的使用数据同步调度的需求时,安全生产是非常重要的,还是推荐大家使用阿里云官方的产品。
3. 写在最后
本期给大家介绍了Datax的相关概念,分享了两个案例供大家参考,但是在实际的数据同步过程中仍有非常多的困难和问题,需要对整个数据传输的链路做分析和优化,操作较为繁杂。后续会给大家介绍案例二中的性能瓶颈分析和优化。
作者:陈树昌
本文为阿里云原创内容,未经允许不得转载
DataX在数据迁移中的应用的更多相关文章
- EF 中 Code First 的数据迁移以及创建视图
写在前面: EF 中 Code First 的数据迁移网上有很多资料,我这份并没什么特别.Code First 创建视图网上也有很多资料,但好像很麻烦,而且亲测好像是无效的方法(可能是我太笨,没搞成功 ...
- HDFS数据迁移解决方案之DistCp工具的巧妙使用
前言 在当今每日信息量巨大的社会中,源源不断的数据需要被安全的存储.等到数据的规模越来越大的时候,也许瓶颈就来了,没有存储空间了.这时候怎么办,你也许会说,加机器解决,显然这是一个很简单直接但是又显得 ...
- nodejs简单数据迁移demo
近期做数据迁移,采用nodejs框架,数据库为mysql.作为一枚菜鸟,在编码过程中,遇到众多奇葩问题,感谢民少给予的支持. 由于旧数据库中的数据,在之前设计中存在众多不合理的情况,因此在数据迁移中, ...
- 阿里云RDS实例内不同数据库之间的数据迁移
适用场景 本文适用于使用DTS实现相同实例下库名不同的数据库之间的数据迁移.本文以使用DTS将同一RDS实例下的amptest库迁移到jiangliu_amptest库为例来说明如何使用DTS实现相同 ...
- Amazon Redshift数据迁移到MaxCompute
Amazon Redshift数据迁移到MaxCompute Amazon Redshift 中的数据迁移到MaxCompute中经常需要先卸载到S3中,再到阿里云对象存储OSS中,大数据计算服务Ma ...
- ASP.NET 5探险(1):Azure中配置连接字符串、独立项目执行EF7数据迁移
(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:我开始把ASP.NET 5用于生产系统开发已经有1个多月了,也填了一些坑积累了一些经验,从今天开始会陆陆续 ...
- 在Entity Framework 7中进行数据迁移
(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:虽然EF7重新设计了Entity Framework,不过也还是能够支持数据迁移的. Entity Fra ...
- Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中
一.开启MyS远程访问功能 1.进入服务器输入netstat -an | grep 3306确认3306是否对外开放,MySQL默认状态下是不对外开放访问功能的.输入以上命令之后如果端口没有被开放就会 ...
- 如何将MongoDB数据库的数据迁移到MySQL数据库中
FAQ v2.0终于上线了,断断续续忙了有2个多月.这个项目是我实践的第一个全栈的项目,从需求(后期有产品经理介入)到架构,再到设计(有征询设计师的意见).构建(前端.后台.数据库.服务器部署),也是 ...
- laravel中migration 数据迁移
简介 数据库迁移就像是数据库的版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构.迁移通常与 Laravel 的数据库结构生成器配合使用,让你轻松地构建数据库结构.如果你曾经试过让同事手动在数 ...
随机推荐
- 【K8S】Docker向私有仓库拉取/推送镜像报错(http: server gave HTTP response to HTTPS client)
这里,我们搭建的Harbor仓库的地址为 http://192.168.175.101:1180. 报错信息如下所示. [root@binghe101 ~]# docker login 192.168 ...
- KingbaseES V8R6集群运维案例之---repmgrd进程启动无法访问共享内存
案例说明: KingbaseES V8R6集群在启动repmgrd进程时,出现'unable to write to shared memory'故障,导致repmgrd进程启动终止. 适用版本: K ...
- KingbaseES V8R6集群运维案例之---sys_hba.conf限制客户端访问数据库
KingbaseES V8R6集群运维案例之---sys_hba.conf限制客户端访问数据库 案例说明: 客户端认证是由一个配置文件(通常名为sys_hba.conf并被存放在数据库集簇目录中)控制 ...
- SQL调优系列--数据严重倾斜的连接优化
背景 对于两个大表关联的场景,如果过滤条件的列值,存在高度倾斜,可以考虑根据反向滤值,进行过滤操作,减少连接的CPU时间. 数据准备 -- 状态表 tp01_state 记录 大表tp01 记录的多种 ...
- 关于Actor Component的思考--学习斯坦佛UE+C++
跟着B站的视频学习,感觉自己的头很混乱.所以浅浅总结一下创建Actor Component之后其的作用和相关操作. Actor Component 首先Component为一个组件,源码就是一个类的声 ...
- .NET分布式Orleans - 8 - 贪吃蛇项目实战(准备阶段)
到目前为止,Orleans7的核心概念基本已经学完,我准备使用Orleans7做一个项目实战,来总结自己的学习效果. 项目效果 通过Orleans7来完成一个贪吃蛇游戏,要求如下: 可以多人在线玩 贪 ...
- #KMP,容斥,dp#洛谷 5770 [JSOI2016] 无界单词
题目传送门 分析 显然如果存在长度大于一半的border那么必然存在小于一半的 border,所以容斥一下, 设 \(dp[i]\) 表示长度为 \(i\) 的不存在公共前后缀的字符串个数,那么 \( ...
- Socket.D v2.4.9 发布
Socket.D 是什么东东? 是基于"事件"和"语义消息""流"的网络应用协议.在微服务.移动应用.物联网等场景,可替代 http.web ...
- Python 数组和列表:创建、访问、添加和删除数组元素
Python 没有内置支持数组,但可以使用 Python 列表来代替. 数组 本页将向您展示如何使用列表作为数组,但要在 Python 中使用数组,您需要导入一个库,比如 NumPy 库.数组用于在一 ...
- 持续构建行业影响力|HarmonyOS SDK荣膺年度“技术卓越”奖项
自2023年9月华为宣布鸿蒙原生应用全面启动以来,HarmonyOS SDK通过将HarmonyOS系统级能力对外开放,支撑开发者高效打造更纯净.更智能.更精致.更易用的鸿蒙原生应用,和开发者共同成长 ...