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凡傅,模式分為增量和全量。
命令簡單示例:
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ù)源:
DataX本身作為離線數(shù)據(jù)同步框架狰右,采用Framework + plugin架構(gòu)構(gòu)建杰捂。將數(shù)據(jù)源讀取和寫入抽象成為Reader+Writer插件,納入到整個同步框架中棋蚌。
目前已到datax3.0框架設計:
datax使用示例嫁佳,核心就是編寫json配置文件job:
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。
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)三部分再榄。
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 |
datax:
屬性 | 值 |
---|---|
CPU平均占用率(%) | 21.99 |
平均速率(MB/s) | 4.95 |
總時間(s) | 202 |
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 |
datax:
屬性 | 值 |
---|---|
CPU平均占用率 | 15.50% |
平均速率 | 5.14MB/s |
總時間 | 122s |
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