datax調研及增量更新的思路


 

一、Datax簡介

​ DataX 是一個異構數據源離線同步工具,致力於實現包括關系型數據庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構數據源之間穩定高效的數據同步功能。

 

 

二、框架設計

DataX本身作為離線數據同步框架,采用Framework + plugin架構構建。將數據源讀取和寫入抽象成為Reader/Writer插件,納入到整個同步框架中。

  • Reader:Reader為數據采集模塊,負責采集數據源的數據,將數據發送給Framework。
  • Writer: Writer為數據寫入模塊,負責不斷向Framework取數據,並將數據寫入到目的端。
  • Framework:Framework用於連接reader和writer,作為兩者的數據傳輸通道,並處理緩沖,流控,並發,數據轉換等核心技術問題。

三、簡單的調研

前段時間,簡單的調研了一下datax,主要通過抽取速度、抽取數據的穩定性,抽取日志,增量抽取等方面進行了datax和kettle之間的對比

3.1抽取速度

先后采用datax和kettle抽取382萬左右的數據:從oracle抽取到mysql

datax需要2分30秒:

 

kettle需要21分鍾:

而將數據量增加至千萬級別時:大概1864萬左右的數據

datax需要21分鍾左右:

 

kettle需要2小時58分:

 

 以上datax是在channel為1的情況下測試的,即單線程抽取

 

3.2抽取日志

日志方面,datax和kettle的日志都是比較好的。不過,當datax的job失敗時,他的日志更加人性化一點:

提供了任務失敗的可能原因:

3.3抽取穩定性

當我們使用kettle從mysql抽取數據導入到hdfs上時,存在丟數據的情況。

對於datax,目前我們處於調研階段,只是運行了個demo,並不能確定是否存在丟數據的情況。目前未發現網上有說丟數據的情況

 

3.4增量抽取

增量抽取一般會先從我們自己的數據庫中查詢出最大的增量標識(一般為id或時間),再從數據源中抽取大於最大標識的數據。

在增量方面,kettle還是支持的很好,但datax缺乏對增量更新的內置支持

 

kettle可以使用工作流的形式,先查詢出目標表的最大值,把這個值作為一個變量傳入下一個階段中。

 

datax:因為datax的job是一個json文件來描述的,增量抽取的where條件需要動態傳入,動態修改json文件不是很方便。所以網上的解決辦法是在json中的where條件使用占位符,並通過shell腳本來動態傳入最大值。

具體可以參考以下兩篇博文:

https://blog.csdn.net/quadimodo/article/details/82186788

http://ju.outofmemory.cn/entry/360202

 3.5動態感知namenode的切換

使用kettle往hdfs上導數據時,namenode的地址是在kettle.properties配置文件中配的,所以當我們的集群重啟時,namenode有可能發生切換,導致kettle導數據任務失敗

而datax往hdfs上導數據時,可以配置namenode 的HA:

 

3.6其他

當然kettle還有一個優勢是有一個可視化界面,我們在服務器中通過vnc可以界面化操作

 

四、增量更新的思路

 

網上提供了一種思路是通過shell腳本來實現的,當然,更重要的是我們已有的增量更新中,不僅有用時間來做增量的,還有通過自增id來抽取的,不同的任務不一樣

所以最好是讓用戶直接配置他們想要的增量字段,通過用戶的配置字段確認需要更新的數據范圍,實現kettle的那一套。

我在網上找了一個開源項目,雖然跟我們的需求有點不一樣,但改改就可以了

https://github.com/Jawf/DataX-Migration

這個項目我大致看了一下,它是將一個庫中的表抽取到另一個庫中,里面有些是需要改動的地方:

1.在配置文件中,他會取imformation.scheme庫中,通過Table表和Column表去查詢源數據庫的對應表的元數據信息,但里面的查詢sql語句是在配置文件中配的,所以在程序中需要動態維護需要導的表名,即執行sql時,需要replace對應的字符串

2.目標數據庫中的表是不會自動創建的,需要手動提前創建好

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM