資料同步工具Sqoop和DataX

MachCraft發表於2021-02-06

在日常大資料生產環境中,經常會有叢集資料集和關係型資料庫互相轉換的需求,在需求選擇的初期解決問題的方法————資料同步工具就應運而生了。此次我們選擇兩款生產環境常用的資料同步工具進行討論

Sqoop

通常資料開發崗位的朋友都會較早的接觸這款工具,因為Sqoop的設計初衷就是在Hadoop和DB(關係型資料庫)、大型機(Oracle服務機)之間搭建橋樑,斬斷資料同步的隔閡。該專案起步於2009年,最早是Hadoop的一個三方模組的存在,後來社群開發者為了能夠快速部署和使用,同時也為了開發人員能夠更快速的迭代開發,最終成為Apache基金會的頂級專案。

核心機制

Sqoop是基於MR的分散式資料同步工具,使用MR完成資料的匯入和匯出,依賴計算框架的能力,可以實現並行操作以及容錯能力

  • 匯入
    在讀取資料庫檔案時,sqoop底層逐行讀取,匯入過程的輸出是一組檔案,其中包含匯入的表或資料集副本,因為
    底層使用的是MR並行處理,所以這一過程會產生多個檔案(序列化二進位制檔案或逗號分割的文字檔案)。匯入的過程
    由JAVA類控制,此類可將資料與序列化檔案進行序列化和反序列化。同時開放的介面可以使用其他工具解析分隔記錄
    資料。

  • 匯出
    當MR或Hive生成的查詢處理結果生成結果集時,可以使用其匯入關係型資料庫。Sqoop將HDFS檔案並行讀取一組文字檔案,將它們解析記錄,並將它們插入到資料庫表中作為新行,供外部程式或使用者進行查詢。

特點

  • 分散式可水平擴充套件
  • 執行模式基於MR
  • 依賴hadoop生態圈,某些業務場景下限制多
  • 負載預設均勻分佈,若不人為修改,某些狀況下會導致負載傾斜
  • 對壓縮檔案支援不友好
  • 啟動速度相對較慢

DataX

DataX是阿里開源的一個異構資料來源離線同步工具,用於在關係型資料庫、HDFS、Hive、ODPS(阿里雲元件)、HBase、DRDS、ADS、TableStore(OTS)、FTP等各種異構資料來源之間做穩定高效的資料同步。從官方給出的定義不難看出這一資料同步框架面向更多資料場景,目前離線同步資料來源已支援DB2、Kafka等工具。

由上圖可知,DataX將複雜的網狀的同步鏈路變成了星型資料鏈路,DataX作為中間傳輸載體負責連線各種資料來源。當需要接入一個新的資料來源的時候,只需要將此資料來源對接到DataX,便能跟已有的資料來源做到無縫資料同步。

框架設計


DataX在設計之初就將同步理念抽象成框架+外掛的形式.框架負責內部的序列化傳輸,緩衝,併發,轉換等而核心技術問題,資料的採集(Reader)和落地(Writer)完全交給外掛執行

DataX Framework提供了簡單的介面與外掛互動,提供簡單的外掛接入機制,只需要任意加上一種外掛,就能無縫對接其他資料來源。經過不停的迭代,當前DataX已經有了比較全面的外掛體系,包括主流的RDBMS,NOSQL以及大資料計算系統

核心模組介紹:

1.DataX完成單個資料同步的作業,我們稱之為Job,DataX接受到一個Job之後,將啟動一個程式來完成整個作業同步過程。DataX Job模組是單個作業的中樞管理節點,承擔了資料清理、子任務切分(將單一作業計算轉化為多個子Task)、TaskGroup管理等功能。
2.DataXJob啟動後,會根據不同的源端切分策略,將Job切分成多個小的Task(子任務),以便於併發執行。Task便是DataX作業的最小單元,每一個Task都會負責一部分資料的同步工作。
3.切分多個Task之後,DataX Job會呼叫Scheduler模組,根據配置的併發資料量,將拆分成的Task重新組合,組裝成TaskGroup(任務組)。每一個TaskGroup負責以一定的併發執行完畢分配好的所有Task,預設單個任務組的併發數量為5。
4.每一個Task都由TaskGroup負責啟動,Task啟動後,會固定啟動Reader—>Channel—>Writer的執行緒來完成任務同步工作。
5.DataX作業執行起來之後, Job監控並等待多個TaskGroup模組任務完成,等待所有TaskGroup任務完成後Job成功退出。否則,異常退出,程式退出值非

特點

  • 單執行緒多程式,不支援分散式
  • 資料轉換功能豐富,可在傳輸過程中脫敏、過濾
  • 傳輸速度可控,具備資訊統計功能
  • 可以進行資料校驗

總結

對比兩者的特點,不難發現Sqoop依賴於Hadoop生態對HDFS、Hive支援友善,在處理數倉大表的速度相對較快,但不具備統計和校驗能力。而DataX無法分散式部署,可以在傳輸過程中進行過濾,並且可以統計傳輸資料的資訊,因此在業務場景複雜(表結構變更)更適用,同時對於不同的資料來源支援更好。且DataX的開源版本目前只支援單機部署,需要依賴排程系統實現多客戶端,同時不支援自動建立表和分割槽。

相關文章