一、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调研及增量更新的思路相关推荐

  1. 基于增量更新的协同过滤

    转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uec0.html 前面的一篇文章分析了基本的协同过滤算法,协同过滤最大的问题是计算量过大,为了解决这个问 ...

  2. RFID读卡器增量更新思路与代码实现

    RFID读卡器增量更新思路与代码实现 0.项目背景 上一篇文章中提到机器人项目中调用摄像头获取实时画面,这次又来了一个新的需求,要使用RFID读卡器识别区域内的商品ID并上传云端,最后由云端返回该商品 ...

  3. 混合式app php怎么打包,如何实现混合 App Web 资源的打包与增量更新

    综述 移动 App 的运行环境具有带宽不稳定,流量收费,启动速度比较重要等特点,所以混合 App 如何加载 Web 资源并不是一个新问题.本文目的是总结出一种资源打包下载的思路和方案,并且提供一种打包 ...

  4. BW:BW增量更新方法(假增量)

    1 说说假增量 我们都知道,对于BW来说,很多ECC的标准数据源自带了增量更新功能,每天各种凭证产生的增量数据会自动堆积到增量队列里,然后BW端做一个增量信息包按天把这些增量抽取到数据仓库里,非常轻松 ...

  5. 数据增量更新定义_TiDB 在 OPPO 准实时数据仓库中的实践

    作者介绍 OPPO 数据分析与解决方案团队主要负责 OPPO 全集团的大数据分析和解决方案提供,团队成员多来自一线互联网公司及著名高校,在 OPPO 众多场景的大数据应用方面有很深经验,极大的支撑了业 ...

  6. 数据增量更新定义_技术资讯 | TiDB在准实时数据仓库中的实践

    " OPPO大数据中心在2019年初承接了接入某业务线核心数据的重要任务:一期目标是建立一个能提供准实时大数据查询服务的数据仓库. 我们选用了之前从未在公司大规模正式使用过的TiDB作为核心 ...

  7. SAP-BW数据仓库增量更新

      1    说说假增量 我们都知道,对于BW来说,很多ECC的标准数据源自带了增量更新功能,每天各种凭证产生的增量数据会自动堆积到增量队列里,然后BW端做一个增量信息包按天把这些增量抽取到数据仓库里 ...

  8. kettle spoon判断增量更新_【论文推荐】张斌等:基于改进 SOINN 算法的恶意软件增量检测方法...

    基于改进SOINN算法的恶意软件增量检测方法 张斌1,2, 李立勋1,2, 董书琴1,2 1 信息工程大学,河南 郑州 450001 2 河南省信息安全重点实验室,河南 郑州 450001 摘要:针对 ...

  9. 2019FME博客大赛——【零编码】利用FME实现城市高德路况抓取及增量更新——以深圳为例

    参赛单元:互联网.大数据及云计算 作者:杨忠智 单位:平安国际智慧城市科技股份有限公司 前言 继续我的[零编码]系列. 简单是美.虽为"码农",但本身还是个GISer,所以在进行数 ...

最新文章

  1. 什么是java本地方法?什么,还没听说过java的native关键字?真的该学学了!
  2. C++ explicit 的用法,就是必须显示调用
  3. angular4 表单
  4. 集算器访问HTTP数据的代码示例
  5. django和mysql如何建模_Django如何设计数据模型
  6. (转)淘淘商城系列——SSM框架整合之逆向工程
  7. Javascript中对空string调用split返回不是空数组
  8. bat中的start
  9. mysql5.7.10 performance_schema_MySQL的show profile简介以及该功能在MySQL 5.7中performance_schema中的替代...
  10. php 抓取 wordpress 文字内容,WordPress获取页面、文章内容代码
  11. Proteus20个应用技巧
  12. 企业版php自动发卡平台,企业版PHP自动发卡平台源码V6.3版
  13. 测试从业人员的职业规划
  14. linux u盘启动系统教程视频教程,如何用u盘启动linux系统教程
  15. matlab cdfx,在 Simulink 数据字典中使用 ASAM CDFX 数据
  16. timedatectl的详细用法
  17. 1 深度学习为甚么如此火热发展如此迅速
  18. Nokia 为何只做 Windows Phone :我怕 Android 市场被三星独霸
  19. 20194711 阚宇航 第一次软工作业
  20. 用友NC二次开发问题汇总【转】

热门文章

  1. idea配置远程服务器实现远程编辑文件及ssh连接
  2. pyspark reduce代码示例
  3. Python 安装 uWSGI并运行一个入门示例
  4. 解决 Ubuntu 18.04 无法关机的问题
  5. storm的基本概念
  6. springmvc导出excel并弹出下载框
  7. 数组元素倒置-Java
  8. 3.5 《数据库系统概论》之基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(定义、查询、更新)
  9. java输入日期计算天数_(JAVA)输入年月日,计算日期是今年的第几天?
  10. mysql倍增表的内容,mysql - DATEDIFF不会在触发器内倍增 - SO中文参考 - www.soinside.com...