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

2022-05-13 14:11:58 浏览数 (1)

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的对比

比较维度

产品

Kettle

DataX

设计及架构

适用场景

面向数据仓库建模传统ETL工具

面向数据仓库建模传统ETL工具

支持数据源

多数关系型数据库

少数关系型数据库和大数据非关系型数据库

开发语言

Java

Python、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

0 人点赞