【ETL】ETL大数据集成工具Sqoop、dataX、Kettle、Canal、StreamSets大比拼

1. 摘要

对于数据仓库,大数据集成类应用,通常会采用ETL工具辅助完成。ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程。当前的很多应用也存在大量的ELT应用模式。常见的ETL工具或类ETL的数据集成同步工具很多,以下对开源的Sqoop、dataX、Kettle、Canal、StreamSetst进行简单梳理比较。

通过分析,笔者个人建议优先DataX更优。

2. 内容

2.1 Sqoop

2.1.1 介绍

Sqoop,SQL-to-Hadoop 即 “SQL到Hadoop和Hadoop到SQL”。 是Apache开源的一款在Hadoop和关系数据库服务器之间传输数据的工具。主要用于在Hadoop与关系型数据库之间进行数据转移,可以将一个关系型数据库(MySQL ,Oracle等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导出到关系型数据库中。 sqoop命令的本质是转化为MapReduce程序。sqoop分为导入(import)和导出(export),策略分为table和query,模式分为增量和全量。

在这里插入图片描述

image.png

命令简单示例:

在这里插入图片描述

image.png

Sqoop支持全量数据导入和增量数据导入(增量数据导入分两种,一是基于递增列的增量数据导入(Append方式)。二是基于时间列的增量数据导入(LastModified方式)),同时可以指定数据是否以并发形式导入。

2.1.2 特点

1、可以将关系型数据库中的数据导入hdfs、hive或者hbase等hadoop组件中,也可将hadoop组件中的数据导入到关系型数据库中;

2、sqoop在导入导出数据时,充分采用了map-reduce计算框架,根据输入条件生成一个map-reduce作业,在hadoop集群中运行。采用map-reduce框架同时在多个节点进行import或者export操作,速度比单节点运行多个并行导入导出效率高,同时提供了良好的并发性和容错性;

3、支持insert、update模式,可以选择参数,若内容存在就更新,若不存在就插入;

4、对国外的主流关系型数据库支持性更好。

2.2.3 Github

https://github.com/apache/sqoop

2.2 dataX

2.2.1 介绍

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。

github地址:https://github.com/alibaba/DataX

支持数据源:

在这里插入图片描述

image.png

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader+Writer插件,纳入到整个同步框架中。

目前已到datax3.0框架设计:

image.png

datax使用示例,核心就是编写json配置文件job:

在这里插入图片描述

image.png

DataX框架内部通过双缓冲队列、线程池封装等技术,集中处理了高速数据交换遇到的问题,提供简单的接口与插件交互,插件分为Reader和Writer两类,基于框架提供的插件接口,可以十分便捷的开发出需要的插件。缺乏对增量更新的内置支持,因为DataX的灵活架构,可以通过shell脚本等方式方便实现增量同步。

2.2.2 特点

1、异构数据库和文件系统之间的数据交换;

2、采用Framework + plugin架构构建,Framework处理了缓冲,流控,并发,上下文加载等高速数据交换的大部分技术问题,提供了简单的接口与插件交互,插件仅需实现对数据处理系统的访问;

3、数据传输过程在单进程内完成,全内存操作,不读写磁盘,也没有IPC;

4、开放式的框架,开发者可以在极短的时间开发一个新插件以快速支持新的数据库/文件系统。

2.2.3 Github

https://github.com/alibaba/DataX

2.3 Kettle

2.3.1 介绍

Kettle,中文名:水壶,是一款国外免费开源的、可视化的、功能强大的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。

Kettle家族目前包括4个产品:Spoon、Pan、CHEF、Kitchen。

组成部分:

Spoon:允许使用图形化界面实现ETL数据转换过程

Pan:批量运行Spoon数据转换过程

Chef:job(有状态,可以监控到是否执行、执行的速度等)

Kitchen:批量运行chef

2.3.2 特点

  • 免费开源:基于Java免费开源软件
  • 易配置:可跨平台,绿色无需安装
  • 不同数据库:ETL工具集,可管理不同数据库的数据
  • 两种脚本文件:transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制
  • 图形界面设计:托拉拽,无需写代码
  • 定时功能:在Job下的start模块,有一个定时功能,可以每日,每周等方式进行定时

2.3.3 Github

https://github.com/pentaho/pentaho-kettle/

2.4 Canal

2.4.1 介绍

canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据实时订阅和消费,目前主要支持了MySQL,也支持mariaDB。

很多大型的互联网项目生产环境中使用,包括阿里、美团等都有广泛的应用,是一个非常成熟的数据库同步方案,基础的使用只需要进行简单的配置即可。

当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x。

在这里插入图片描述

image.png

canal的工作原理就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 dump协议,MySQL mater收到canal发送过来的dump请求,开始推送binary log给canal,然后canal解析binary log,再发送到存储目的地,比如MySQL,Kafka,Elastic Search等等。

与其问canal能做什么,不如说数据同步有什么作用。

但是canal的数据同步不是全量的,而是增量。基于binary log增量订阅和消费,canal可以做:

  • 数据库镜像
  • 数据库实时备份
  • 索引构建和实时维护
  • 业务cache(缓存)刷新
  • 带业务逻辑的增量数据处理

2.4.2 特点

canal是通过模拟成为mysql 的slave的方式,监听mysql 的binlog日志来获取数据,binlog设置为row模式以后,不仅能获取到执行的每一个增删改的脚本,同时还能获取到修改前和修改后的数据,基于这个特性,canal就能高性能的获取到mysql数据数据的变更。

2.4.3 Github

github地址:https://github.com/alibaba/canal

2.5 StreamSets

2.5.1 介绍

Streamsets是一个大数据实时采集ETL工具,可以实现不写一行代码完成数据的采集和流转。通过拖拽式的可视化界面,实现数据管道(Pipelines)的设计和定时任务调度。

数据源支持MySQL、Oracle等结构化和半/非结构化,目标源支持HDFS、Hive、Hbase、Kudu、Solr、Elasticserach等。创建一个Pipelines管道需要配置数据源(Origins)、操作(Processors)、目的地(Destinations)三部分。

在这里插入图片描述

image.png

在这里插入图片描述

image.png

2.5.2 特点

Streamsets的强大之处:

  • 拖拽式可视化界面操作,No coding required 可实现不写一行代码
  • 强大整合力,100+ Ready-to-Use Origins and Destinations,支持100+数据源和目标源
  • 可视化内置调度监控,实时观测数据流和数据质量

2.5.3 Github

地址:https://github.com/streamsets/

2.6 Sqoop和Datax的区别

2.6.1 特点对比

1、sqoop采用map-reduce计算框架进行导入导出,而datax仅仅在运行datax的单台机器上进行数据的抽取和加载,速度比sqoop慢了许多;

2、sqoop只可以在关系型数据库和hadoop组件之间进行数据迁移,而在hadoop相关组件之间,比如hive和hbase之间就无法使用。sqoop互相导入导出数据,同时在关系型数据库之间,比如mysql和oracle之间也无法通过sqoop导入导出数据。

与之相反,datax能够分别实现关系型数据库hadoop组件之间、关系型数据库之间、hadoop组件之间的数据迁移;

3、sqoop是专门为hadoop而生,对hadoop支持度好,而datax可能会出现不支持高版本hadoop的现象;

4、sqoop只支持官方提供的指定几种关系型数据库和hadoop组件之间的数据交换,而在datax中,用户只需根据自身需求修改文件,生成相应rpm包,自行安装之后就可以使用自己定制的插件;

2.6.2 性能对比

1、mysql->hdfs

在mysql中生成50,000,000条数据,将这些数据分别使用datax和sqoop导入到hdfs中,分别比较它们的性能参数:

在mysql中生成50,000,000条数据,将这些数据分别使用datax和sqoop导入到hdfs中,分别比较它们的性能参数:

sqoop:
属性
CPU时间(ms)325500
读取物理内存快照大小(byte)3045625856
读取虚拟内存快照大小(byte)10975498240
平均速率(MB/s)20.0809
总时间(s)99.2047

5.DataX性能对比 - 图1

datax:
属性
CPU平均占用率(%)21.99
平均速率(MB/s)4.95
总时间(s)202

在这里插入图片描述

image.png

2、oracle->hdfs

在oracle中生成50,000,000条数据,将这些数据分别使用datax和sqoop导入到hdfs中,分别比较它们的性能参数:

sqoop:
属性
CPU时间86510毫秒
读取物理内存快照大小2865557504
读取虚拟内存快照大小10937077760
平均速率6.4137MB/s
总时间94.9979s

在这里插入图片描述

image.png

datax:
属性
CPU平均占用率15.50%
平均速率5.14MB/s
总时间122s

image.png

2.6.3 与TDH的兼容性

1、与TDH中的hadoop版本兼容,能够将关系型数据库中数据导入TDH中的hdfs中;

2、datax拥有一个sqoop没有的功能,就是将数据从hdfs导入到hbase,但是该功能目前仅仅支持的hbase版本为:0.94.x和1.1.x两个。而TDH中hyperbase的hbase版本为0.98.6,所以也不支持TDH的Hyperbase。

2.7 Datax和Kettle的对比

比较维度产品KettleDataX
设计及架构适用场景面向数据仓库建模传统ETL工具面向数据仓库建模传统ETL工具
支持数据源多数关系型数据库少数关系型数据库和大数据非关系型数据库
开发语言JavaPython、Java
可视化web界面KettleOnline代码收费Kettle-manager代码免费Data-Web代码免费
底层架构主从结构非高可用,扩展性差,架构容错性低,不适用大数据场景支持单机部署和集群部署两种方式
功能CDC机基于时间戳、触发器等离线批处理
抽取策略支持增量,全量抽取支持全量抽取。不支持增量抽取要通过shell脚本自己实现
对数据库的影响对数据库表结构有要求,存在一定侵入性通过sql select 采集数据,对数据源没有侵入性
自动断点续传不支持不支持
数据清洗围绕数据仓库的数据需求进行建模计算,清洗功能相对复杂,需要手动编程需要根据自身清晰规则编写清洗脚本,进行调用(DataX3.0 提供的功能)。
数据转换手动配置schema mapping通过编写json脚本进行schema mapping映射
特性数据实时性非实时定时
应用难度
是否需要开发
易用性
稳定性
抽取速度小数据量的情况下差别不大,大数据量时datax比kettle快。datax对于数据库压力比较小
其他实施及售后服务开源软件,社区活跃度高阿里开源代码,社区活跃度低

3. 参考

(4)数据同步之道(Sqoop、dataX、Kettle、Canal、StreamSets) https://www.modb.pro/db/86290

(1)数据抽取工具比对:Kettle、Datax、Sqoop、StreamSets https://blog.csdn.net/xiaozm1223/article/details/89670460

(2)ETL学习总结(2)——ETL数据集成工具之kettle、sqoop、datax、streamSets 比较 https://zhanghaiyang.blog.csdn.net/article/details/104446610

(3)数据集成工具Kettle、Sqoop、DataX的比较 https://www.cnblogs.com/bayu/articles/13335917.html

(5)Datax与Sqoop的对比 https://blog.csdn.net/lzhcoder/article/details/107902791

(6)Datax和Kettle的对比 https://blog.csdn.net/lzhcoder/article/details/120830522

(7)超详细的Canal入门,看这篇就够了! https://blog.csdn.net/yehongzhi1994/article/details/107880162

如有侵权,请联系本人

删除。

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
SqoopKettleDataX都是常用的ETL(抽取、转换和加载)工具,用于数据仓库、大数据集成等应用。下面对它们的使用进行介绍。 Sqoop是一个开源工具,用于在Hadoop和关系数据库之间进行数据传输。它可以将关系型数据库中的数据导入到Hadoop的HDFS中,或者将HDFS中的数据导出到关系数据库中。Sqoop的底层是使用MapReduce程序实现的。Sqoop支持导入和导出操作,可以根据表和查询来进行数据传输,同时也支持增量和全量导入导出策略。 Kettle(也称为Pentaho Data Integration)是一个通用的数据集成工具,支持多种数据源和目标。它提供了可视化界面,使用户可以通过图形化界面来创建数据集成的连接、定义转换和逻辑。Kettle有两种脚本文件,trans用于数据转换,job用于工作流的调度和控制。Kettle还支持作业调度和监控,可以自动化执行数据集成任务。 DataX是阿里巴巴开源的数据集成工具,也支持多种数据源和目标。DataX可以进行离线批处理和实时数据抽取,支持单机部署和集群部署。它使用SQL select语句来采集数据,对数据源没有侵入性。DataX还提供了数据清洗功能,可以根据规则编写清洗脚本进行数据清洗。相对于KettleDataX在处理大数据量时具有更好的性能。 综上所述,Sqoop适用于Hadoop和关系数据库之间的数据传输,KettleDataX都是通用的数据集成工具,提供了丰富的数据转换和清洗功能。选择使用哪种工具可以根据具体的需求和场景来决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九层之台起于累土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值