DataX介紹以及優(yōu)缺點分析

DataX介紹:

DataX 是阿里開源的一個異構(gòu)數(shù)據(jù)源離線同步工具悠抹,致力于實現(xiàn)包括關(guān)系型數(shù)據(jù)庫(MySQL、Oracle等)扩淀、HDFS楔敌、Hive、ODPS驻谆、HBase卵凑、FTP等各種異構(gòu)數(shù)據(jù)源之間穩(wěn)定高效的數(shù)據(jù)同步功能庆聘。

DataX設(shè)計理念

DataX本身作為數(shù)據(jù)同步框架,將不同數(shù)據(jù)源的同步抽象為從源頭數(shù)據(jù)源讀取數(shù)據(jù)的Reader插件勺卢,以及向目標(biāo)端寫入數(shù)據(jù)的Writer插件掏觉,理論上DataX框架可以支持任意數(shù)據(jù)源類型的數(shù)據(jù)同步工作。同時DataX插件體系作為一套生態(tài)系統(tǒng), 每接入一套新數(shù)據(jù)源該新加入的數(shù)據(jù)源即可實現(xiàn)和現(xiàn)有的數(shù)據(jù)源互通值漫。

image

DataX框架設(shè)計

DataX本身作為離線數(shù)據(jù)同步框架,采用Framework + plugin架構(gòu)構(gòu)建织盼。將數(shù)據(jù)源讀取和寫入抽象成為Reader/Writer插件杨何,納入到整個同步框架中。

image

1. Reader:Reader為數(shù)據(jù)采集模塊沥邻,負(fù)責(zé)采集數(shù)據(jù)源的數(shù)據(jù)危虱,將數(shù)據(jù)發(fā)送給Framework。

2. Writer: Writer為數(shù)據(jù)寫入模塊唐全,負(fù)責(zé)不斷向Framework取數(shù)據(jù)埃跷,并將數(shù)據(jù)寫入到目的端。

3. Framework:Framework用于連接reader和writer邮利,作為兩者的數(shù)據(jù)傳輸通道弥雹,并處理緩沖,流控延届,并發(fā)剪勿,數(shù)據(jù)轉(zhuǎn)換等核心技術(shù)問題。

DataX插件體系

DataX目前已經(jīng)有了比較全面的插件體系方庭,主流的RDBMS數(shù)據(jù)庫厕吉、NOSQL、大數(shù)據(jù)計算系統(tǒng)都已經(jīng)接入械念,目前支持?jǐn)?shù)據(jù)如下圖头朱,詳情請點擊:DataX數(shù)據(jù)源參考指南

image

DataX核心架構(gòu)

image

核心模塊介紹:

  • DataX完成單個數(shù)據(jù)同步的作業(yè),我們稱之為Job龄减,DataX接受到一個Job之后项钮,將啟動一個進(jìn)程來完成整個作業(yè)同步過程。DataX Job模塊是單個作業(yè)的中樞管理節(jié)點欺殿,承擔(dān)了數(shù)據(jù)清理寄纵、子任務(wù)切分(將單一作業(yè)計算轉(zhuǎn)化為多個子Task)、TaskGroup管理等功能脖苏。
  • DataXJob啟動后程拭,會根據(jù)不同的源端切分策略,將Job切分成多個小的Task(子任務(wù))棍潘,以便于并發(fā)執(zhí)行恃鞋。Task便是DataX作業(yè)的最小單元崖媚,每一個Task都會負(fù)責(zé)一部分?jǐn)?shù)據(jù)的同步工作。
  • 切分多個Task之后恤浪,DataX Job會調(diào)用Scheduler模塊畅哑,根據(jù)配置的并發(fā)數(shù)據(jù)量,將拆分成的Task重新組合水由,組裝成TaskGroup(任務(wù)組)荠呐。每一個TaskGroup負(fù)責(zé)以一定的并發(fā)運(yùn)行完畢分配好的所有Task,默認(rèn)單個任務(wù)組的并發(fā)數(shù)量為5砂客。
  • 每一個Task都由TaskGroup負(fù)責(zé)啟動泥张,Task啟動后,會固定啟動Reader—>Channel—>Writer的線程來完成任務(wù)同步工作鞠值。
  • DataX作業(yè)運(yùn)行起來之后媚创, Job監(jiān)控并等待多個TaskGroup模塊任務(wù)完成,等待所有TaskGroup任務(wù)完成后Job成功退出彤恶。否則钞钙,異常退出,進(jìn)程退出值非0声离。

DataX執(zhí)行流程

image

1芒炼、解析配置,包括job.json术徊、core.json焕议、plugin.json三個配置

2、設(shè)置jobId到configuration當(dāng)中

3弧关、啟動Engine盅安,通過Engine.start()進(jìn)入啟動程序

4、設(shè)置RUNTIME_MODE到configuration當(dāng)中

5世囊、通過JobContainer的start()方法啟動

6别瞭、依次執(zhí)行job的preHandler()、init()株憾、prepare()蝙寨、split()、schedule()嗤瞎、- post()墙歪、postHandle()等方法。

7贝奇、init()方法涉及到根據(jù)configuration來初始化reader和writer插件虹菲,這里涉及到j(luò)ar包熱加載以及調(diào)用插件init()操作方法,同時設(shè)置reader和writer的configuration信息

8掉瞳、prepare()方法涉及到初始化reader和writer插件的初始化,通過調(diào)用插件的prepare()方法實現(xiàn),每個插件都有自己的jarLoader掸屡,通過集成URLClassloader實現(xiàn)而來

9、split()方法通過adjustChannelNumber()方法調(diào)整channel個數(shù)掏秩,同時執(zhí)行reader和writer最細(xì)粒度的切分,需要注意的是,writer的切分結(jié)果要參照reader的切分結(jié)果,達(dá)到切分后數(shù)目相等响谓,才能滿足1:1的通道模型

10、channel的計數(shù)主要是根據(jù)byte和record的限速來實現(xiàn)的(如果自己沒有設(shè)置了channel的個數(shù))省艳,在split()的函數(shù)中第一步就是計算channel的大小

11歌粥、split()方法reader插件會根據(jù)channel的值進(jìn)行拆分,但是有些reader插件可能不會參考channel的值拍埠,writer插件會完全根據(jù)reader的插件1:1進(jìn)行返回

12、split()方法內(nèi)部的mergeReaderAndWriterTaskConfigs()負(fù)責(zé)合并reader土居、writer枣购、以及transformer三者關(guān)系,生成task的配置擦耀,并且重寫job.content的配置

13棉圈、schedule()方法根據(jù)split()拆分生成的task配置分配生成taskGroup對象,根據(jù)task的數(shù)量和單個taskGroup支持的task數(shù)量進(jìn)行配置眷蜓,兩者相除就可以得出taskGroup的數(shù)量14分瘾、schdule()內(nèi)部通過AbstractScheduler的schedule()執(zhí)行,繼續(xù)執(zhí)行startAllTaskGroup()方法創(chuàng)建所有的TaskGroupContainer組織相關(guān)的task吁系,TaskGroupContainerRunner負(fù)責(zé)運(yùn)行TaskGroupContainer執(zhí)行分配的task德召。

15、taskGroupContainerExecutorService啟動固定的線程池用以執(zhí)行TaskGroupContainerRunner對象汽纤,TaskGroupContainerRunner的run()方法調(diào)用taskGroupContainer.start()方法上岗,針對每個channel創(chuàng)建一個TaskExecutor,通過taskExecutor.doStart()啟動任務(wù)蕴坪。

DataX和sqoop的比較

image

我們公司用的是sqoop肴掷,針對自身總結(jié)的缺點:

1.由于mysql的表結(jié)構(gòu)變更,引起的數(shù)據(jù)抽取失敗背传。(目前添加監(jiān)控呆瞻,自動更改還需要開發(fā))

2.抽取速度有待提高,對于大表径玖,指定多個map痴脾,可能會導(dǎo)致數(shù)據(jù)重復(fù),需要單獨做處理梳星。

3.不支持mongoDB

4.啟動的速度比較慢

在測試DataX中發(fā)現(xiàn)的問題:

1.目前公司表中基本上沒有自增主鍵明郭,對于數(shù)據(jù)量大的表(目前數(shù)據(jù)量還有待測試)买窟,抽取速度慢(6千萬的表7116rec/s,兩千萬的速度在7902rec/s,1千萬的表在19307rec/s 左右)薯定,如果有自增主鍵或者整型的索引字段始绍,速度是56716rec/s ,使用uuid生成的主鍵话侄,會存在主鍵切分不均勻現(xiàn)象(可以修改源碼)亏推。

2.目前開源版本只支持單機(jī)模式,需要依賴調(diào)度系統(tǒng)(在每個節(jié)點上部署客戶端)

3.不支持自動創(chuàng)建表和分區(qū)年堆,寫入的hdfs路徑必須存在(可以后期修改源代碼吞杭,或者使用腳本生成)

4.生成配置文件比較繁瑣(每張表需要生成一張配置文件,可以使用代碼生成)

DataX的優(yōu)點總結(jié)

1.除比較大的表之外变丧,速度明顯比sqoop快(表數(shù)據(jù)量3000萬分界點并且表沒有自增的整型主鍵芽狗,前面是sqoop 22:27 - 35:58 一共751s,后面是指定5個channel時間162s,第三個是一個channel時間是471s痒蓬,大表sqoop也比較慢童擎,使用多個map,然后去重攻晒,分為兩個階段)顾复。

image
image
image

2.Datax的速度可以配置,可以根據(jù)我們的實際情況控制

image

3.日志相比于sqoop比較完善和人性化鲁捏。

4.對于臟數(shù)據(jù)的處理

  • 在大量數(shù)據(jù)的傳輸過程中芯砸,必定會由于各種原因?qū)е潞芏鄶?shù)據(jù)傳輸報錯(比如類型轉(zhuǎn)換錯誤),這種數(shù)據(jù)DataX認(rèn)為就是臟數(shù)據(jù)给梅。DataX目前可以實現(xiàn)臟數(shù)據(jù)精確過濾假丧、識別、采集动羽、展示虎谢,提供多種的臟數(shù)據(jù)處理模式。
  • Job支持用戶對于臟數(shù)據(jù)的自定義監(jiān)控和告警曹质,包括對臟數(shù)據(jù)最大記錄數(shù)閾值(record值)或者臟數(shù)據(jù)占比閾值(percentage值)婴噩,當(dāng)Job傳輸過程出現(xiàn)的臟數(shù)據(jù)大于用戶指定的數(shù)量/百分比,DataX Job報錯退出羽德。
  • 圖中的配置的意思是當(dāng)臟數(shù)據(jù)大于10條几莽,或者臟數(shù)據(jù)比例達(dá)到0.05%,任務(wù)就會報錯
image

5.健壯的容錯機(jī)制:DataX作業(yè)是極易受外部因素的干擾宅静,網(wǎng)絡(luò)閃斷章蚣、數(shù)據(jù)源不穩(wěn)定等因素很容易讓同步到一半的作業(yè)報錯停止。因此穩(wěn)定性是DataX的基本要求,在DataX 3.0的設(shè)計中纤垂,重點完善了框架和插件的穩(wěn)定性矾策。

image

6.豐富的數(shù)據(jù)轉(zhuǎn)換功能

DataX作為一個服務(wù)于大數(shù)據(jù)的ETL工具,除了提供數(shù)據(jù)快照搬遷功能之外峭沦,還提供了豐富數(shù)據(jù)轉(zhuǎn)換的功能贾虽,讓數(shù)據(jù)在傳輸過程中可以輕松完成數(shù)據(jù)脫敏,補(bǔ)全吼鱼,過濾等數(shù)據(jù)轉(zhuǎn)換功能蓬豁,另外還提供了自動groovy函數(shù),讓用戶自定義轉(zhuǎn)換函數(shù)菇肃。

輕易科技研發(fā)中心 管理臺研發(fā) 柴曉雪

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末地粪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子琐谤,更是在濱河造成了極大的恐慌蟆技,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斗忌,死亡現(xiàn)場離奇詭異质礼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)飞蹂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翻屈,“玉大人陈哑,你說我怎么就攤上這事∩炜簦” “怎么了惊窖?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長厘贼。 經(jīng)常有香客問我界酒,道長,這世上最難降的妖魔是什么嘴秸? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任毁欣,我火速辦了婚禮,結(jié)果婚禮上岳掐,老公的妹妹穿的比我還像新娘凭疮。我一直安慰自己,他們只是感情好串述,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布执解。 她就那樣靜靜地躺著,像睡著了一般纲酗。 火紅的嫁衣襯著肌膚如雪衰腌。 梳的紋絲不亂的頭發(fā)上新蟆,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音右蕊,去河邊找鬼琼稻。 笑死,一個胖子當(dāng)著我的面吹牛尤泽,可吹牛的內(nèi)容都是我干的欣簇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼坯约,長吁一口氣:“原來是場噩夢啊……” “哼熊咽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闹丐,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤横殴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卿拴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衫仑,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年堕花,在試婚紗的時候發(fā)現(xiàn)自己被綠了文狱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡缘挽,死狀恐怖瞄崇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壕曼,我是刑警寧澤苏研,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站腮郊,受9級特大地震影響摹蘑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜轧飞,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一衅鹿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧过咬,春花似錦塘安、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春切黔,著一層夾襖步出監(jiān)牢的瞬間砸脊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工纬霞, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留凌埂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓诗芜,卻偏偏與公主長得像瞳抓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伏恐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 開篇 ?最早接觸DataX是在前阿里同事在現(xiàn)在的公司引入的時候提到的孩哑,一直想抽空好好看看這部分代碼,因為DataX...
    晴天哥_王志閱讀 42,090評論 16 45
  • 概覽 DataX 是一個異構(gòu)數(shù)據(jù)源離線同步工具翠桦,致力于實現(xiàn)包括關(guān)系型數(shù)據(jù)庫(MySQL横蜒、Oracle等)、HDFS...
    tracy_668閱讀 701評論 0 1
  • 一销凑、DataX3.0概述 DataX 是一個異構(gòu)數(shù)據(jù)源離線同步工具丛晌,致力于實現(xiàn)包括關(guān)系型數(shù)據(jù)庫(MySQL、Ora...
    勤奮的超跑閱讀 11,526評論 1 12
  • 1. DataX 概述及安裝 DataX 是被廣泛使用的數(shù)據(jù)同步工具斗幼,由阿里巴巴集團(tuán)使用 Java 和 Pytho...
    珺王不早朝閱讀 10,625評論 0 2
  • 一. DataX 3.0概覽 ? DataX 是一個異構(gòu)數(shù)據(jù)源離線同步工具澎蛛,致力于實現(xiàn)包括關(guān)系型數(shù)據(jù)庫(MySQL...
    承諾一時的華麗閱讀 4,201評論 0 6