數據同步工具Sqoop和DataX

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

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的開源版本目前只支援單機部署,需要依賴調度系統實現多客戶端,同時不支援自動創建表和分區。

Tags: