datax调研及增量更新的思路
?
一、Datax簡介
? DataX 是一個(gè)異構(gòu)數(shù)據(jù)源離線同步工具,致力于實(shí)現(xiàn)包括關(guān)系型數(shù)據(jù)庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構(gòu)數(shù)據(jù)源之間穩(wěn)定高效的數(shù)據(jù)同步功能。
?
?
二、框架設(shè)計(jì)
DataX本身作為離線數(shù)據(jù)同步框架,采用Framework + plugin架構(gòu)構(gòu)建。將數(shù)據(jù)源讀取和寫入抽象成為Reader/Writer插件,納入到整個(gè)同步框架中。
- Reader:Reader為數(shù)據(jù)采集模塊,負(fù)責(zé)采集數(shù)據(jù)源的數(shù)據(jù),將數(shù)據(jù)發(fā)送給Framework。
- Writer: Writer為數(shù)據(jù)寫入模塊,負(fù)責(zé)不斷向Framework取數(shù)據(jù),并將數(shù)據(jù)寫入到目的端。
- Framework:Framework用于連接reader和writer,作為兩者的數(shù)據(jù)傳輸通道,并處理緩沖,流控,并發(fā),數(shù)據(jù)轉(zhuǎn)換等核心技術(shù)問題。
三、簡單的調(diào)研
前段時(shí)間,簡單的調(diào)研了一下datax,主要通過抽取速度、抽取數(shù)據(jù)的穩(wěn)定性,抽取日志,增量抽取等方面進(jìn)行了datax和kettle之間的對比
3.1抽取速度
先后采用datax和kettle抽取382萬左右的數(shù)據(jù):從oracle抽取到mysql
datax需要2分30秒:
?
kettle需要21分鐘:
而將數(shù)據(jù)量增加至千萬級別時(shí):大概1864萬左右的數(shù)據(jù)
datax需要21分鐘左右:
?
kettle需要2小時(shí)58分:
?
?以上datax是在channel為1的情況下測試的,即單線程抽取
?
3.2抽取日志
日志方面,datax和kettle的日志都是比較好的。不過,當(dāng)datax的job失敗時(shí),他的日志更加人性化一點(diǎn):
提供了任務(wù)失敗的可能原因:
3.3抽取穩(wěn)定性
當(dāng)我們使用kettle從mysql抽取數(shù)據(jù)導(dǎo)入到hdfs上時(shí),存在丟數(shù)據(jù)的情況。
對于datax,目前我們處于調(diào)研階段,只是運(yùn)行了個(gè)demo,并不能確定是否存在丟數(shù)據(jù)的情況。目前未發(fā)現(xiàn)網(wǎng)上有說丟數(shù)據(jù)的情況
?
3.4增量抽取
增量抽取一般會(huì)先從我們自己的數(shù)據(jù)庫中查詢出最大的增量標(biāo)識(一般為id或時(shí)間),再從數(shù)據(jù)源中抽取大于最大標(biāo)識的數(shù)據(jù)。
在增量方面,kettle還是支持的很好,但datax缺乏對增量更新的內(nèi)置支持
?
kettle可以使用工作流的形式,先查詢出目標(biāo)表的最大值,把這個(gè)值作為一個(gè)變量傳入下一個(gè)階段中。
?
datax:因?yàn)閐atax的job是一個(gè)json文件來描述的,增量抽取的where條件需要?jiǎng)討B(tài)傳入,動(dòng)態(tài)修改json文件不是很方便。所以網(wǎng)上的解決辦法是在json中的where條件使用占位符,并通過shell腳本來動(dòng)態(tài)傳入最大值。
具體可以參考以下兩篇博文:
https://blog.csdn.net/quadimodo/article/details/82186788
http://ju.outofmemory.cn/entry/360202
?3.5動(dòng)態(tài)感知namenode的切換
使用kettle往hdfs上導(dǎo)數(shù)據(jù)時(shí),namenode的地址是在kettle.properties配置文件中配的,所以當(dāng)我們的集群重啟時(shí),namenode有可能發(fā)生切換,導(dǎo)致kettle導(dǎo)數(shù)據(jù)任務(wù)失敗
而datax往hdfs上導(dǎo)數(shù)據(jù)時(shí),可以配置namenode 的HA:
?
3.6其他
當(dāng)然kettle還有一個(gè)優(yōu)勢是有一個(gè)可視化界面,我們在服務(wù)器中通過vnc可以界面化操作
?
四、增量更新的思路
?
網(wǎng)上提供了一種思路是通過shell腳本來實(shí)現(xiàn)的,當(dāng)然,更重要的是我們已有的增量更新中,不僅有用時(shí)間來做增量的,還有通過自增id來抽取的,不同的任務(wù)不一樣
所以最好是讓用戶直接配置他們想要的增量字段,通過用戶的配置字段確認(rèn)需要更新的數(shù)據(jù)范圍,實(shí)現(xiàn)kettle的那一套。
我在網(wǎng)上找了一個(gè)開源項(xiàng)目,雖然跟我們的需求有點(diǎn)不一樣,但改改就可以了
https://github.com/Jawf/DataX-Migration
這個(gè)項(xiàng)目我大致看了一下,它是將一個(gè)庫中的表抽取到另一個(gè)庫中,里面有些是需要改動(dòng)的地方:
1.在配置文件中,他會(huì)取imformation.scheme庫中,通過Table表和Column表去查詢源數(shù)據(jù)庫的對應(yīng)表的元數(shù)據(jù)信息,但里面的查詢sql語句是在配置文件中配的,所以在程序中需要?jiǎng)討B(tài)維護(hù)需要導(dǎo)的表名,即執(zhí)行sql時(shí),需要replace對應(yīng)的字符串
2.目標(biāo)數(shù)據(jù)庫中的表是不會(huì)自動(dòng)創(chuàng)建的,需要手動(dòng)提前創(chuàng)建好
?
轉(zhuǎn)載于:https://www.cnblogs.com/tianyafu/p/9907391.html
總結(jié)
以上是生活随笔為你收集整理的datax调研及增量更新的思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴国华178重142斤l970年在宁波部
- 下一篇: 志愿军人在寒风中就像麦田里的秸秆一样什么