【知識】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的對比

比較維度 產品 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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,224評論 6 529
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,916評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,014評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,466評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,245評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,795評論 1 320
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,869評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,010評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,524評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,487評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,634評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,173評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,884評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,282評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,541評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,236評論 3 388
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,623評論 2 370