【知識】ETL大數(shù)據(jù)集成工具Sqoop、dataX旋讹、Kettle殖蚕、Canal、StreamSets大比拼

1. 摘要

對于數(shù)據(jù)倉庫沉迹,大數(shù)據(jù)集成類應用睦疫,通常會采用ETL工具輔助完成。ETL鞭呕,是英文 Extract-Transform-Load 的縮寫蛤育,用來描述將數(shù)據(jù)從來源端經(jīng)過抽取(extract)、交互轉(zhuǎn)換(transform)瓦糕、加載(load)至目的端的過程底洗。當前的很多應用也存在大量的ELT應用模式。常見的ETL工具或類ETL的數(shù)據(jù)集成同步工具很多咕娄,以下對開源的Sqoop亥揖、dataX、Kettle圣勒、Canal费变、StreamSetst進行簡單梳理比較。

通過分析灾而,筆者個人建議優(yōu)先DataX更優(yōu)胡控。

2. 內(nèi)容

2.1 Sqoop

2.1.1 介紹

Sqoop,SQL-to-Hadoop 即 “SQL到Hadoop和Hadoop到SQL”旁趟。
是Apache開源的一款在Hadoop和關系數(shù)據(jù)庫服務器之間傳輸數(shù)據(jù)的工具昼激。主要用于在Hadoop與關系型數(shù)據(jù)庫之間進行數(shù)據(jù)轉(zhuǎn)移,可以將一個關系型數(shù)據(jù)庫(MySQL ,Oracle等)中的數(shù)據(jù)導入到Hadoop的HDFS中锡搜,也可以將HDFS的數(shù)據(jù)導出到關系型數(shù)據(jù)庫中橙困。
sqoop命令的本質(zhì)是轉(zhuǎn)化為MapReduce程序。sqoop分為導入(import)和導出(export)耕餐,策略分為table和query凡傅,模式分為增量和全量。

image.png

命令簡單示例:

image.png

Sqoop支持全量數(shù)據(jù)導入和增量數(shù)據(jù)導入(增量數(shù)據(jù)導入分兩種肠缔,一是基于遞增列的增量數(shù)據(jù)導入(Append方式)夏跷。二是基于時間列的增量數(shù)據(jù)導入(LastModified方式)),同時可以指定數(shù)據(jù)是否以并發(fā)形式導入明未。

2.1.2 特點

1槽华、可以將關系型數(shù)據(jù)庫中的數(shù)據(jù)導入hdfs、hive或者hbase等hadoop組件中趟妥,也可將hadoop組件中的數(shù)據(jù)導入到關系型數(shù)據(jù)庫中猫态;

2、sqoop在導入導出數(shù)據(jù)時披摄,充分采用了map-reduce計算框架亲雪,根據(jù)輸入條件生成一個map-reduce作業(yè),在hadoop集群中運行疚膊。采用map-reduce框架同時在多個節(jié)點進行import或者export操作义辕,速度比單節(jié)點運行多個并行導入導出效率高,同時提供了良好的并發(fā)性和容錯性寓盗;

3终息、支持insert夺巩、update模式,可以選擇參數(shù)周崭,若內(nèi)容存在就更新,若不存在就插入喳张;

4续镇、對國外的主流關系型數(shù)據(jù)庫支持性更好。

2.2.3 Github

https://github.com/apache/sqoop

2.2 dataX

2.2.1 介紹

DataX 是阿里巴巴集團內(nèi)被廣泛使用的離線數(shù)據(jù)同步工具/平臺销部,實現(xiàn)包括 MySQL摸航、Oracle、SqlServer舅桩、Postgre酱虎、HDFS、Hive擂涛、ADS读串、HBase、TableStore(OTS)撒妈、MaxCompute(ODPS)恢暖、DRDS 等各種異構(gòu)數(shù)據(jù)源之間高效的數(shù)據(jù)同步功能。

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

支持數(shù)據(jù)源:

image.png

DataX本身作為離線數(shù)據(jù)同步框架狰右,采用Framework + plugin架構(gòu)構(gòu)建杰捂。將數(shù)據(jù)源讀取和寫入抽象成為Reader+Writer插件,納入到整個同步框架中棋蚌。

目前已到datax3.0框架設計:

image.png

datax使用示例嫁佳,核心就是編寫json配置文件job:

image.png

DataX框架內(nèi)部通過雙緩沖隊列、線程池封裝等技術,集中處理了高速數(shù)據(jù)交換遇到的問題,提供簡單的接口與插件交互,插件分為Reader和Writer兩類,基于框架提供的插件接口,可以十分便捷的開發(fā)出需要的插件谷暮。缺乏對增量更新的內(nèi)置支持蒿往,因為DataX的靈活架構(gòu),可以通過shell腳本等方式方便實現(xiàn)增量同步坷备。

2.2.2 特點

1熄浓、異構(gòu)數(shù)據(jù)庫和文件系統(tǒng)之間的數(shù)據(jù)交換;

2省撑、采用Framework + plugin架構(gòu)構(gòu)建赌蔑,F(xiàn)ramework處理了緩沖,流控竟秫,并發(fā)娃惯,上下文加載等高速數(shù)據(jù)交換的大部分技術問題,提供了簡單的接口與插件交互肥败,插件僅需實現(xiàn)對數(shù)據(jù)處理系統(tǒng)的訪問趾浅;

3愕提、數(shù)據(jù)傳輸過程在單進程內(nèi)完成,全內(nèi)存操作皿哨,不讀寫磁盤浅侨,也沒有IPC;

4证膨、開放式的框架如输,開發(fā)者可以在極短的時間開發(fā)一個新插件以快速支持新的數(shù)據(jù)庫/文件系統(tǒng)。

2.2.3 Github

https://github.com/alibaba/DataX

2.3 Kettle

2.3.1 介紹

Kettle央勒,中文名:水壺不见,是一款國外免費開源的、可視化的崔步、功能強大的ETL工具稳吮,純java編寫,可以在Windows井濒、Linux灶似、Unix上運行,數(shù)據(jù)抽取高效穩(wěn)定眼虱。

Kettle家族目前包括4個產(chǎn)品:Spoon喻奥、Pan、CHEF捏悬、Kitchen撞蚕。

組成部分:

Spoon:允許使用圖形化界面實現(xiàn)ETL數(shù)據(jù)轉(zhuǎn)換過程

Pan:批量運行Spoon數(shù)據(jù)轉(zhuǎn)換過程

Chef:job(有狀態(tài),可以監(jiān)控到是否執(zhí)行过牙、執(zhí)行的速度等)

Kitchen:批量運行chef

2.3.2 特點

  • 免費開源:基于Java免費開源軟件
  • 易配置:可跨平臺甥厦,綠色無需安裝
  • 不同數(shù)據(jù)庫:ETL工具集,可管理不同數(shù)據(jù)庫的數(shù)據(jù)
  • 兩種腳本文件:transformation和job寇钉,transformation完成針對數(shù)據(jù)的基礎轉(zhuǎn)換刀疙,job則完成整個工作流的控制
  • 圖形界面設計:托拉拽,無需寫代碼
  • 定時功能:在Job下的start模塊扫倡,有一個定時功能谦秧,可以每日,每周等方式進行定時

2.3.3 Github

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

2.4 Canal

2.4.1 介紹

canal是阿里巴巴旗下的一款開源項目撵溃,純Java開發(fā)疚鲤。基于數(shù)據(jù)庫增量日志解析缘挑,提供增量數(shù)據(jù)實時訂閱和消費集歇,目前主要支持了MySQL,也支持mariaDB语淘。

很多大型的互聯(lián)網(wǎng)項目生產(chǎn)環(huán)境中使用诲宇,包括阿里际歼、美團等都有廣泛的應用,是一個非常成熟的數(shù)據(jù)庫同步方案姑蓝,基礎的使用只需要進行簡單的配置即可鹅心。

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

image.png

canal的工作原理就是把自己偽裝成MySQL slave纺荧,模擬MySQL slave的交互協(xié)議向MySQL Mater發(fā)送 dump協(xié)議巴帮,MySQL mater收到canal發(fā)送過來的dump請求,開始推送binary log給canal虐秋,然后canal解析binary log,再發(fā)送到存儲目的地垃沦,比如MySQL客给,Kafka,Elastic Search等等肢簿。

與其問canal能做什么靶剑,不如說數(shù)據(jù)同步有什么作用。

但是canal的數(shù)據(jù)同步不是全量的池充,而是增量桩引。基于binary log增量訂閱和消費收夸,canal可以做:

  • 數(shù)據(jù)庫鏡像
  • 數(shù)據(jù)庫實時備份
  • 索引構(gòu)建和實時維護
  • 業(yè)務cache(緩存)刷新
  • 帶業(yè)務邏輯的增量數(shù)據(jù)處理

2.4.2 特點

canal是通過模擬成為mysql 的slave的方式坑匠,監(jiān)聽mysql 的binlog日志來獲取數(shù)據(jù),binlog設置為row模式以后卧惜,不僅能獲取到執(zhí)行的每一個增刪改的腳本厘灼,同時還能獲取到修改前和修改后的數(shù)據(jù),基于這個特性咽瓷,canal就能高性能的獲取到mysql數(shù)據(jù)數(shù)據(jù)的變更设凹。

2.4.3 Github

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

2.5 StreamSets

2.5.1 介紹

Streamsets是一個大數(shù)據(jù)實時采集ETL工具,可以實現(xiàn)不寫一行代碼完成數(shù)據(jù)的采集和流轉(zhuǎn)茅姜。通過拖拽式的可視化界面闪朱,實現(xiàn)數(shù)據(jù)管道(Pipelines)的設計和定時任務調(diào)度。

數(shù)據(jù)源支持MySQL钻洒、Oracle等結(jié)構(gòu)化和半/非結(jié)構(gòu)化奋姿,目標源支持HDFS、Hive航唆、Hbase胀蛮、Kudu、Solr糯钙、Elasticserach等粪狼。創(chuàng)建一個Pipelines管道需要配置數(shù)據(jù)源(Origins)退腥、操作(Processors)、目的地(Destinations)三部分再榄。

image.png
image.png

2.5.2 特點

Streamsets的強大之處:

  • 拖拽式可視化界面操作狡刘,No coding required 可實現(xiàn)不寫一行代碼
  • 強大整合力,100+ Ready-to-Use Origins and Destinations困鸥,支持100+數(shù)據(jù)源和目標源
  • 可視化內(nèi)置調(diào)度監(jiān)控嗅蔬,實時觀測數(shù)據(jù)流和數(shù)據(jù)質(zhì)量

2.5.3 Github

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

2.6 Sqoop和Datax的區(qū)別

2.6.1 特點對比

1、sqoop采用map-reduce計算框架進行導入導出疾就,而datax僅僅在運行datax的單臺機器上進行數(shù)據(jù)的抽取和加載澜术,速度比sqoop慢了許多;

2猬腰、sqoop只可以在關系型數(shù)據(jù)庫和hadoop組件之間進行數(shù)據(jù)遷移鸟废,而在hadoop相關組件之間,比如hive和hbase之間就無法使用姑荷。sqoop互相導入導出數(shù)據(jù)盒延,同時在關系型數(shù)據(jù)庫之間,比如mysql和oracle之間也無法通過sqoop導入導出數(shù)據(jù)鼠冕。

與之相反添寺,datax能夠分別實現(xiàn)關系型數(shù)據(jù)庫hadoop組件之間、關系型數(shù)據(jù)庫之間懈费、hadoop組件之間的數(shù)據(jù)遷移计露;

3、sqoop是專門為hadoop而生楞捂,對hadoop支持度好薄坏,而datax可能會出現(xiàn)不支持高版本hadoop的現(xiàn)象;

4寨闹、sqoop只支持官方提供的指定幾種關系型數(shù)據(jù)庫和hadoop組件之間的數(shù)據(jù)交換胶坠,而在datax中,用戶只需根據(jù)自身需求修改文件繁堡,生成相應rpm包沈善,自行安裝之后就可以使用自己定制的插件;

2.6.2 性能對比

1椭蹄、mysql->hdfs

在mysql中生成50,000,000條數(shù)據(jù)闻牡,將這些數(shù)據(jù)分別使用datax和sqoop導入到hdfs中,分別比較它們的性能參數(shù):

在mysql中生成50,000,000條數(shù)據(jù)绳矩,將這些數(shù)據(jù)分別使用datax和sqoop導入到hdfs中罩润,分別比較它們的性能參數(shù):

sqoop:
屬性
CPU時間(ms) 325500
讀取物理內(nèi)存快照大小(byte) 3045625856
讀取虛擬內(nèi)存快照大小(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條數(shù)據(jù)翼馆,將這些數(shù)據(jù)分別使用datax和sqoop導入到hdfs中割以,分別比較它們的性能參數(shù):

sqoop:
屬性
CPU時間 86510毫秒
讀取物理內(nèi)存快照大小 2865557504
讀取虛擬內(nèi)存快照大小 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版本兼容,能夠?qū)㈥P系型數(shù)據(jù)庫中數(shù)據(jù)導入TDH中的hdfs中严沥;

2猜极、datax擁有一個sqoop沒有的功能,就是將數(shù)據(jù)從hdfs導入到hbase消玄,但是該功能目前僅僅支持的hbase版本為:0.94.x和1.1.x兩個跟伏。而TDH中hyperbase的hbase版本為0.98.6,所以也不支持TDH的Hyperbase翩瓜。

2.7 Datax和Kettle的對比

比較維度 產(chǎn)品 Kettle DataX
設計及架構(gòu) 適用場景 面向數(shù)據(jù)倉庫建模傳統(tǒng)ETL工具 面向數(shù)據(jù)倉庫建模傳統(tǒng)ETL工具
支持數(shù)據(jù)源 多數(shù)關系型數(shù)據(jù)庫 少數(shù)關系型數(shù)據(jù)庫和大數(shù)據(jù)非關系型數(shù)據(jù)庫
開發(fā)語言 Java Python受扳、Java
可視化web界面 KettleOnline代碼收費
Kettle-manager代碼免費
Data-Web代碼免費
底層架構(gòu) 主從結(jié)構(gòu)非高可用,擴展性差兔跌,架構(gòu)容錯性低辞色,不適用大數(shù)據(jù)場景 支持單機部署和集群部署兩種方式
功能 CDC機 基于時間戳、觸發(fā)器等 離線批處理
抽取策略 支持增量浮定,全量抽取 支持全量抽取。不支持增量抽取要通過shell腳本自己實現(xiàn)
對數(shù)據(jù)庫的影響 對數(shù)據(jù)庫表結(jié)構(gòu)有要求层亿,存在一定侵入性 通過sql select 采集數(shù)據(jù)桦卒,對數(shù)據(jù)源沒有侵入性
自動斷點續(xù)傳 不支持 不支持
數(shù)據(jù)清洗 圍繞數(shù)據(jù)倉庫的數(shù)據(jù)需求進行建模計算,清洗功能相對復雜匿又,需要手動編程 需要根據(jù)自身清晰規(guī)則編寫清洗腳本方灾,進行調(diào)用(DataX3.0 提供的功能)。
數(shù)據(jù)轉(zhuǎn)換 手動配置schema mapping 通過編寫json腳本進行schema mapping映射
特性 數(shù)據(jù)實時性 非實時 定時
應用難度
是否需要開發(fā)
易用性
穩(wěn)定性
抽取速度 小數(shù)據(jù)量的情況下差別不大碌更,大數(shù)據(jù)量時datax比kettle快裕偿。 datax對于數(shù)據(jù)庫壓力比較小
其他 實施及售后服務 開源軟件,社區(qū)活躍度高 阿里開源代碼痛单,社區(qū)活躍度低

3. 參考

(4)數(shù)據(jù)同步之道(Sqoop嘿棘、dataX、Kettle旭绒、Canal鸟妙、StreamSets)
https://www.modb.pro/db/86290

(1)數(shù)據(jù)抽取工具比對:Kettle、Datax挥吵、Sqoop重父、StreamSets
https://blog.csdn.net/xiaozm1223/article/details/89670460

(2)ETL學習總結(jié)(2)——ETL數(shù)據(jù)集成工具之kettle、sqoop忽匈、datax房午、streamSets 比較
https://zhanghaiyang.blog.csdn.net/article/details/104446610

(3)數(shù)據(jù)集成工具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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沪曙,隨后出現(xiàn)的幾起案子奕污,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件民褂,死亡現(xiàn)場離奇詭異宝磨,居然都是意外死亡,警方通過查閱死者的電腦和手機嘱根,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巷懈,“玉大人该抒,你說我怎么就攤上這事《パ啵” “怎么了凑保?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涌攻。 經(jīng)常有香客問我欧引,道長,這世上最難降的妖魔是什么恳谎? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任芝此,我火速辦了婚禮,結(jié)果婚禮上因痛,老公的妹妹穿的比我還像新娘婚苹。我一直安慰自己,他們只是感情好鸵膏,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布膊升。 她就那樣靜靜地躺著,像睡著了一般谭企。 火紅的嫁衣襯著肌膚如雪用僧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天赞咙,我揣著相機與錄音责循,去河邊找鬼。 笑死攀操,一個胖子當著我的面吹牛院仿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼歹垫,長吁一口氣:“原來是場噩夢啊……” “哼剥汤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起排惨,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤吭敢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后暮芭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹿驼,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年辕宏,在試婚紗的時候發(fā)現(xiàn)自己被綠了畜晰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡瑞筐,死狀恐怖凄鼻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情聚假,我是刑警寧澤块蚌,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站膘格,受9級特大地震影響匈子,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闯袒,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望游岳。 院中可真熱鬧政敢,春花似錦、人聲如沸胚迫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽访锻。三九已至褪尝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間期犬,已是汗流浹背河哑。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留龟虎,地道東北人璃谨。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親佳吞。 傳聞我的和親對象是個殘疾皇子拱雏,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345