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,模式分為增量和全量。
命令簡單示例:
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
支持數據源:
DataX本身作為離線數據同步框架,采用Framework + plugin架構構建。將數據源讀取和寫入抽象成為Reader+Writer插件,納入到整個同步框架中。
目前已到datax3.0框架設計:
datax使用示例,核心就是編寫json配置文件job:
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。
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)三部分。
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 |
datax:
屬性 | 值 |
---|---|
CPU平均占用率(%) | 21.99 |
平均速率(MB/s) | 4.95 |
總時間(s) | 202 |
2、oracle->hdfs
在oracle中生成50,000,000條數據,將這些數據分別使用datax和sqoop導入到hdfs中,分別比較它們的性能參數:
sqoop:
屬性 | 值 |
---|---|
CPU時間 | 86510毫秒 |
讀取物理內存快照大小 | 2865557504 |
讀取虛擬內存快照大小 | 10937077760 |
平均速率 | 6.4137MB/s |
總時間 | 94.9979s |
datax:
屬性 | 值 |
---|---|
CPU平均占用率 | 15.50% |
平均速率 | 5.14MB/s |
總時間 | 122s |
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