大數據同步工具DataX與Sqoop之比較

DataX是一個在異構的數據庫/文件系統之間高速交換數據的工具,實現了在任意的數據處理系統(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

大數據同步工具DataX與Sqoop之比較


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章