DataX是一個在異構的資料庫/檔案系統之間高速交換資料的工具,實現了在任意的資料HTTP://www.aliyun.com/zixun/aggregation/34332.html">處理系統(RDBMS/ Hdfs/Local filesystem)之間的資料交換,由淘寶資料平臺部門完成。 Sqoop是一個用來將Hadoop和關聯式資料庫中的資料相互轉移的工具,可以將一個關聯式資料庫(例如 : MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中, 也可以將HDFS的資料導進到關聯式資料庫中。 同樣是大資料異構環境資料同步工具,二者有什麼差別呢?本文轉自Dean的博客。
從接觸DataX起就有一個疑問,它和Sqoop到底有什麼區別,昨天部署好了DataX和Sqoop,就可以對兩者進行更深入的瞭解了。
兩者從原理上看有點相似,都是解決異構環境的資料交換問題,都支援oracle,mysql,hdfs,hive的互相交換,對於不同資料庫的支援都是外掛程式式的,對於新增的資料來源類型,只要新開發一個外掛程式就好了,
但是只細看兩者的架構圖,很快就會發現明顯的不同
DataX架構圖
大資料同步工具DataX與Sqoop之比較
Job: 一道資料同步作業
Splitter: 作業切分模組,將一個大任務與分解成多個可以併發的小任務.
Sub-job: 資料同步作業切分後的小任務
Reader(Loader): 資料讀入模組,負責運行切分後的小任務,將資料從源頭裝載入DataX
Storage: Reader和Writer通過Storage交換資料
Writer(Dumper): 資料寫出模組,負責將資料從DataX導入至目的資料地
Sqoop架構圖
大資料同步工具DataX與Sqoop之比較
DataX 直接在運行DataX的機器上進行資料的抽取及載入。
而Sqoop充分裡面了map-reduce的計算框架。 Sqoop根據輸入條件,生成一個map-reduce的作業,在Hadoop的框架中運行。
從理論上講,用map-reduce框架同時在多個節點上進行import應該會比從單節點上運行多個並行導入效率高。 而實際的測試中也是如此,測試一個Oracle to hdfs的作業,DataX上只能看到運行DataX上的機器的資料庫連接,而Sqoop運行時,4台task-tracker全部產生一個資料庫連接。 調起的Sqoop作業的機器也會產生一個資料庫連接,應為需要讀取資料表的一些中繼資料資訊,資料量等,做分區。
Sqoop現在作為Apache的頂級專案,如果要我從DataX和Sqoop中間選擇的話,我想我還是會選擇Sqoop。 而且Sqoop還有很多協力廠商的外掛程式。 早上使用了Quest開發的OraOop外掛程式,確實像quest說的一樣,速度有著大幅的提升,Quest在資料庫方面的經驗,確實比旁人深厚。
大資料同步工具DataX與Sqoop之比較
在我的測試環境上,一台只有700m記憶體的,IO低下的oracle資料庫,百兆的網路,使用Quest的Sqoop外掛程式在4個並行度的情況下,匯出到HDFS速度有5MB/s ,這已經讓我很滿意了。 相比使用原生Sqoop的2.8MB/s快了將近一倍,sqoop又比DataX的760KB/s快了兩倍。
另外一點Sqoop採用命令列的方式調用,比如容易與我們的現有的調度監控方案相結合,DataX採用xml 設定檔的方式,在開發運維上還是有點不方便。
附圖1. Sqoop with Quest oracle connector