日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

datax调研及增量更新的思路

發(fā)布時(shí)間:2024/10/12 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 datax调研及增量更新的思路 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

一、Datax簡(jiǎn)介

? DataX 是一個(gè)異構(gòu)數(shù)據(jù)源離線同步工具,致力于實(shí)現(xiàn)包括關(guān)系型數(shù)據(jù)庫(kù)(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ù)問(wèn)題。

三、簡(jiǎn)單的調(diào)研

前段時(shí)間,簡(jiǎn)單的調(diào)研了一下datax,主要通過(guò)抽取速度、抽取數(shù)據(jù)的穩(wěn)定性,抽取日志,增量抽取等方面進(jìn)行了datax和kettle之間的對(duì)比

3.1抽取速度

先后采用datax和kettle抽取382萬(wàn)左右的數(shù)據(jù):從oracle抽取到mysql

datax需要2分30秒:

?

kettle需要21分鐘:

而將數(shù)據(jù)量增加至千萬(wàn)級(jí)別時(shí):大概1864萬(wàn)左右的數(shù)據(jù)

datax需要21分鐘左右:

?

kettle需要2小時(shí)58分:

?

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

?

3.2抽取日志

日志方面,datax和kettle的日志都是比較好的。不過(guò),當(dāng)datax的job失敗時(shí),他的日志更加人性化一點(diǎn):

提供了任務(wù)失敗的可能原因:

3.3抽取穩(wěn)定性

當(dāng)我們使用kettle從mysql抽取數(shù)據(jù)導(dǎo)入到hdfs上時(shí),存在丟數(shù)據(jù)的情況。

對(duì)于datax,目前我們處于調(diào)研階段,只是運(yùn)行了個(gè)demo,并不能確定是否存在丟數(shù)據(jù)的情況。目前未發(fā)現(xiàn)網(wǎng)上有說(shuō)丟數(shù)據(jù)的情況

?

3.4增量抽取

增量抽取一般會(huì)先從我們自己的數(shù)據(jù)庫(kù)中查詢出最大的增量標(biāo)識(shí)(一般為id或時(shí)間),再?gòu)臄?shù)據(jù)源中抽取大于最大標(biāo)識(shí)的數(shù)據(jù)。

在增量方面,kettle還是支持的很好,但datax缺乏對(duì)增量更新的內(nèi)置支持

?

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

?

datax:因?yàn)閐atax的job是一個(gè)json文件來(lái)描述的,增量抽取的where條件需要?jiǎng)討B(tài)傳入,動(dòng)態(tài)修改json文件不是很方便。所以網(wǎng)上的解決辦法是在json中的where條件使用占位符,并通過(guò)shell腳本來(lái)動(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)勢(shì)是有一個(gè)可視化界面,我們?cè)诜?wù)器中通過(guò)vnc可以界面化操作

?

四、增量更新的思路

?

網(wǎng)上提供了一種思路是通過(guò)shell腳本來(lái)實(shí)現(xiàn)的,當(dāng)然,更重要的是我們已有的增量更新中,不僅有用時(shí)間來(lái)做增量的,還有通過(guò)自增id來(lái)抽取的,不同的任務(wù)不一樣

所以最好是讓用戶直接配置他們想要的增量字段,通過(guò)用戶的配置字段確認(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è)庫(kù)中的表抽取到另一個(gè)庫(kù)中,里面有些是需要改動(dòng)的地方:

1.在配置文件中,他會(huì)取imformation.scheme庫(kù)中,通過(guò)Table表和Column表去查詢?cè)磾?shù)據(jù)庫(kù)的對(duì)應(yīng)表的元數(shù)據(jù)信息,但里面的查詢sql語(yǔ)句是在配置文件中配的,所以在程序中需要?jiǎng)討B(tài)維護(hù)需要導(dǎo)的表名,即執(zhí)行sql時(shí),需要replace對(duì)應(yīng)的字符串

2.目標(biāo)數(shù)據(jù)庫(kù)中的表是不會(huì)自動(dòng)創(chuàng)建的,需要手動(dòng)提前創(chuàng)建好

?

轉(zhuǎn)載于:https://www.cnblogs.com/tianyafu/p/9907391.html

總結(jié)

以上是生活随笔為你收集整理的datax调研及增量更新的思路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。