datax调研及增量更新的思路
一、Datax简介
DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
二、框架设计
DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
- Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
- Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
- Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
三、简单的调研
前段时间,简单的调研了一下datax,主要通过抽取速度、抽取数据的稳定性,抽取日志,增量抽取等方面进行了datax和kettle之间的对比
3.1抽取速度
先后采用datax和kettle抽取382万左右的数据:从oracle抽取到mysql
datax需要2分30秒:
kettle需要21分钟:
而将数据量增加至千万级别时:大概1864万左右的数据
datax需要21分钟左右:
kettle需要2小时58分:
以上datax是在channel为1的情况下测试的,即单线程抽取
3.2抽取日志
日志方面,datax和kettle的日志都是比较好的。不过,当datax的job失败时,他的日志更加人性化一点:
提供了任务失败的可能原因:
3.3抽取稳定性
当我们使用kettle从mysql抽取数据导入到hdfs上时,存在丢数据的情况。
对于datax,目前我们处于调研阶段,只是运行了个demo,并不能确定是否存在丢数据的情况。目前未发现网上有说丢数据的情况
3.4增量抽取
增量抽取一般会先从我们自己的数据库中查询出最大的增量标识(一般为id或时间),再从数据源中抽取大于最大标识的数据。
在增量方面,kettle还是支持的很好,但datax缺乏对增量更新的内置支持
kettle可以使用工作流的形式,先查询出目标表的最大值,把这个值作为一个变量传入下一个阶段中。
datax:因为datax的job是一个json文件来描述的,增量抽取的where条件需要动态传入,动态修改json文件不是很方便。所以网上的解决办法是在json中的where条件使用占位符,并通过shell脚本来动态传入最大值。
具体可以参考以下两篇博文:
https://blog.csdn.net/quadimodo/article/details/82186788
http://ju.outofmemory.cn/entry/360202
3.5动态感知namenode的切换
使用kettle往hdfs上导数据时,namenode的地址是在kettle.properties配置文件中配的,所以当我们的集群重启时,namenode有可能发生切换,导致kettle导数据任务失败
而datax往hdfs上导数据时,可以配置namenode 的HA:
3.6其他
当然kettle还有一个优势是有一个可视化界面,我们在服务器中通过vnc可以界面化操作
四、增量更新的思路
网上提供了一种思路是通过shell脚本来实现的,当然,更重要的是我们已有的增量更新中,不仅有用时间来做增量的,还有通过自增id来抽取的,不同的任务不一样
所以最好是让用户直接配置他们想要的增量字段,通过用户的配置字段确认需要更新的数据范围,实现kettle的那一套。
我在网上找了一个开源项目,虽然跟我们的需求有点不一样,但改改就可以了
https://github.com/Jawf/DataX-Migration
这个项目我大致看了一下,它是将一个库中的表抽取到另一个库中,里面有些是需要改动的地方:
1.在配置文件中,他会取imformation.scheme库中,通过Table表和Column表去查询源数据库的对应表的元数据信息,但里面的查询sql语句是在配置文件中配的,所以在程序中需要动态维护需要导的表名,即执行sql时,需要replace对应的字符串
2.目标数据库中的表是不会自动创建的,需要手动提前创建好
转载于:https://www.cnblogs.com/tianyafu/p/9907391.html
datax调研及增量更新的思路相关推荐
- 基于增量更新的协同过滤
转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uec0.html 前面的一篇文章分析了基本的协同过滤算法,协同过滤最大的问题是计算量过大,为了解决这个问 ...
- RFID读卡器增量更新思路与代码实现
RFID读卡器增量更新思路与代码实现 0.项目背景 上一篇文章中提到机器人项目中调用摄像头获取实时画面,这次又来了一个新的需求,要使用RFID读卡器识别区域内的商品ID并上传云端,最后由云端返回该商品 ...
- 混合式app php怎么打包,如何实现混合 App Web 资源的打包与增量更新
综述 移动 App 的运行环境具有带宽不稳定,流量收费,启动速度比较重要等特点,所以混合 App 如何加载 Web 资源并不是一个新问题.本文目的是总结出一种资源打包下载的思路和方案,并且提供一种打包 ...
- BW:BW增量更新方法(假增量)
1 说说假增量 我们都知道,对于BW来说,很多ECC的标准数据源自带了增量更新功能,每天各种凭证产生的增量数据会自动堆积到增量队列里,然后BW端做一个增量信息包按天把这些增量抽取到数据仓库里,非常轻松 ...
- 数据增量更新定义_TiDB 在 OPPO 准实时数据仓库中的实践
作者介绍 OPPO 数据分析与解决方案团队主要负责 OPPO 全集团的大数据分析和解决方案提供,团队成员多来自一线互联网公司及著名高校,在 OPPO 众多场景的大数据应用方面有很深经验,极大的支撑了业 ...
- 数据增量更新定义_技术资讯 | TiDB在准实时数据仓库中的实践
" OPPO大数据中心在2019年初承接了接入某业务线核心数据的重要任务:一期目标是建立一个能提供准实时大数据查询服务的数据仓库. 我们选用了之前从未在公司大规模正式使用过的TiDB作为核心 ...
- SAP-BW数据仓库增量更新
1 说说假增量 我们都知道,对于BW来说,很多ECC的标准数据源自带了增量更新功能,每天各种凭证产生的增量数据会自动堆积到增量队列里,然后BW端做一个增量信息包按天把这些增量抽取到数据仓库里 ...
- kettle spoon判断增量更新_【论文推荐】张斌等:基于改进 SOINN 算法的恶意软件增量检测方法...
基于改进SOINN算法的恶意软件增量检测方法 张斌1,2, 李立勋1,2, 董书琴1,2 1 信息工程大学,河南 郑州 450001 2 河南省信息安全重点实验室,河南 郑州 450001 摘要:针对 ...
- 2019FME博客大赛——【零编码】利用FME实现城市高德路况抓取及增量更新——以深圳为例
参赛单元:互联网.大数据及云计算 作者:杨忠智 单位:平安国际智慧城市科技股份有限公司 前言 继续我的[零编码]系列. 简单是美.虽为"码农",但本身还是个GISer,所以在进行数 ...
最新文章
- 什么是java本地方法?什么,还没听说过java的native关键字?真的该学学了!
- C++ explicit 的用法,就是必须显示调用
- angular4 表单
- 集算器访问HTTP数据的代码示例
- django和mysql如何建模_Django如何设计数据模型
- (转)淘淘商城系列——SSM框架整合之逆向工程
- Javascript中对空string调用split返回不是空数组
- bat中的start
- mysql5.7.10 performance_schema_MySQL的show profile简介以及该功能在MySQL 5.7中performance_schema中的替代...
- php 抓取 wordpress 文字内容,WordPress获取页面、文章内容代码
- Proteus20个应用技巧
- 企业版php自动发卡平台,企业版PHP自动发卡平台源码V6.3版
- 测试从业人员的职业规划
- linux u盘启动系统教程视频教程,如何用u盘启动linux系统教程
- matlab cdfx,在 Simulink 数据字典中使用 ASAM CDFX 数据
- timedatectl的详细用法
- 1 深度学习为甚么如此火热发展如此迅速
- Nokia 为何只做 Windows Phone :我怕 Android 市场被三星独霸
- 20194711 阚宇航 第一次软工作业
- 用友NC二次开发问题汇总【转】
热门文章
- idea配置远程服务器实现远程编辑文件及ssh连接
- pyspark reduce代码示例
- Python 安装 uWSGI并运行一个入门示例
- 解决 Ubuntu 18.04 无法关机的问题
- storm的基本概念
- springmvc导出excel并弹出下载框
- 数组元素倒置-Java
- 3.5 《数据库系统概论》之基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(定义、查询、更新)
- java输入日期计算天数_(JAVA)输入年月日,计算日期是今年的第几天?
- mysql倍增表的内容,mysql - DATEDIFF不会在触发器内倍增 - SO中文参考 - www.soinside.com...