1 概覽
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ù)同步功能。
1.1 設(shè)計理念
為了解決異構(gòu)數(shù)據(jù)源同步問題,DataX將復(fù)雜的網(wǎng)狀的同步鏈路變成了星型數(shù)據(jù)鏈路,DataX作為中間傳輸載體負(fù)責(zé)連接各種數(shù)據(jù)源。
當(dāng)需要接入一個新的數(shù)據(jù)源的時候,只需要將此數(shù)據(jù)源對接到DataX,便能跟已有的數(shù)據(jù)源做到無縫數(shù)據(jù)同步。
1.2 當(dāng)前使用現(xiàn)狀
DataX在阿里巴巴集團內(nèi)被廣泛使用,承擔(dān)了所有大數(shù)據(jù)的離線同步業(yè)務(wù),并已持續(xù)穩(wěn)定運行了6年之久。目前每天完成同步8w多道作業(yè),每日傳輸數(shù)據(jù)量超過300TB。
此前已經(jīng)開源DataX1.0版本,此次介紹為阿里云開源全新版本DataX3.0,有了更多更強大的功能和更好的使用體驗。
2 框架設(shè)計
作為離線數(shù)據(jù)同步框架,采用Framework + plugin架構(gòu)。將數(shù)據(jù)源讀取、寫入抽象成為Reader/Writer插件,納入到整個同步框架:
- Reader:數(shù)據(jù)采集模塊,采集數(shù)據(jù)源的數(shù)據(jù),將數(shù)據(jù)發(fā)送給Framework
- Writer: 數(shù)據(jù)寫入模塊,不斷向Framework取數(shù)據(jù),并將數(shù)據(jù)寫入到目的端
- Framework:連接reader和writer,作為兩者的數(shù)據(jù)傳輸通道,并處理緩沖,流控,并發(fā),數(shù)據(jù)轉(zhuǎn)換等核心技術(shù)
3 插件體系
主流RDBMS數(shù)據(jù)庫、NOSQL、大數(shù)據(jù)計算系統(tǒng)都已接入。DataX目前支持:
類型 | 數(shù)據(jù)源 | Reader(讀) | Writer(寫) | 文檔 |
---|---|---|---|---|
RDBMS 關(guān)系型數(shù)據(jù)庫 | MySQL | √ | √ | 讀 、寫 |
Oracle | √ | √ | 讀 、寫 | |
OceanBase | √ | √ | 讀 、寫 | |
SQLServer | √ | √ | 讀 、寫 | |
PostgreSQL | √ | √ | 讀 、寫 | |
DRDS | √ | √ | 讀 、寫 | |
達夢 | √ | √ | 讀 、寫 | |
通用RDBMS(支持所有關(guān)系型數(shù)據(jù)庫) | √ | √ | 讀 、寫 | |
阿里云數(shù)倉數(shù)據(jù)存儲 | ODPS | √ | √ | 讀 、寫 |
ADS | √ | 寫 | ||
OSS | √ | √ | 讀 、寫 | |
OCS | √ | √ | 讀 、寫 | |
NoSQL數(shù)據(jù)存儲 | OTS | √ | √ | 讀 、寫 |
Hbase0.94 | √ | √ | 讀 、寫 | |
Hbase1.1 | √ | √ | 讀 、寫 | |
MongoDB | √ | √ | 讀 、寫 | |
Hive | √ | √ | 讀 、寫 | |
無結(jié)構(gòu)化數(shù)據(jù)存儲 | TxtFile | √ | √ | 讀 、寫 |
FTP | √ | √ | 讀 、寫 | |
HDFS | √ | √ | 讀 、寫 | |
Elasticsearch | √ | 寫 |
DataX Framework提供了簡單的接口與插件交互,提供簡單的插件接入機制,只需要任意加上一種插件,就能無縫對接其他數(shù)據(jù)源。
DataX數(shù)據(jù)源指南
4 核心架構(gòu)
支持單機多線程模式完成同步作業(yè)運行,DataX作業(yè)生命周期的時序圖,從整體架構(gòu)設(shè)計非常簡要說明DataX各個模塊相互關(guān)系。
4.1 核心模塊
- DataX完成單個數(shù)據(jù)同步的作業(yè),稱為Job,DataX接受到一個Job后,將啟動一個進程完成整個作業(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ā)運行完畢分配好的所有Task,默認(rèn)單個任務(wù)組的并發(fā)數(shù)量為5
- 每一個Task都由TaskGroup負(fù)責(zé)啟動,Task啟動后,會固定啟動Reader—>Channel—>Writer的線程來完成任務(wù)同步工作
- DataX作業(yè)運行起來之后, Job監(jiān)控并等待多個TaskGroup模塊任務(wù)完成,等待所有TaskGroup任務(wù)完成后Job成功退出。否則,異常退出,進程退出值非0
4.2 DataX調(diào)度流程
用戶提交一個DataX作業(yè),并配置20個并發(fā),將一個100張分表的mysql數(shù)據(jù)同步到odps。
DataX調(diào)度決策思路:
- DataXJob根據(jù)分庫分表切分成100個Task
- 根據(jù)20個并發(fā),DataX計算共需分配4個TaskGroup
- 4個TaskGroup平分切分好的100個Task,每個TaskGroup負(fù)責(zé)以5個并發(fā)共計運行25個Task
對比 sqoop
5 核心優(yōu)勢
5.1 可靠的數(shù)據(jù)質(zhì)量監(jiān)控
-
完美解決數(shù)據(jù)傳輸個別類型失真問題
DataX舊版對于部分?jǐn)?shù)據(jù)類型(比如時間戳)傳輸一直存在毫秒階段等數(shù)據(jù)失真情況,新版本DataX3.0已經(jīng)做到支持所有的強數(shù)據(jù)類型,每一種插件都有自己的數(shù)據(jù)類型轉(zhuǎn)換策略,讓數(shù)據(jù)可以完整無損的傳輸?shù)侥康亩恕?/p>
-
提供作業(yè)全鏈路的流量、數(shù)據(jù)量運行時監(jiān)控
DataX3.0運行過程中可以將作業(yè)本身狀態(tài)、數(shù)據(jù)流量、數(shù)據(jù)速度、執(zhí)行進度等信息進行全面的展示,讓用戶可以實時了解作業(yè)狀態(tài)。并可在作業(yè)執(zhí)行過程中智能判斷源端和目的端的速度對比情況,給予用戶更多性能排查信息。
-
提供臟數(shù)據(jù)探測
在大量數(shù)據(jù)的傳輸過程中,必定會由于各種原因?qū)е潞芏鄶?shù)據(jù)傳輸報錯(比如類型轉(zhuǎn)換錯誤),這種數(shù)據(jù)DataX認(rèn)為就是臟數(shù)據(jù)。DataX目前可以實現(xiàn)臟數(shù)據(jù)精確過濾、識別、采集、展示,為用戶提供多種的臟數(shù)據(jù)處理模式,讓用戶準(zhǔn)確把控數(shù)據(jù)質(zhì)量大關(guān)!
豐富的數(shù)據(jù)轉(zhuǎn)換功能
DataX作為一個服務(wù)于大數(shù)據(jù)的ETL工具,除了提供數(shù)據(jù)快照搬遷功能之外,還提供了豐富數(shù)據(jù)轉(zhuǎn)換的功能,讓數(shù)據(jù)在傳輸過程中可以輕松完成數(shù)據(jù)脫敏,補全,過濾等數(shù)據(jù)轉(zhuǎn)換功能,另外還提供了自動groovy函數(shù),讓用戶自定義轉(zhuǎn)換函數(shù)。詳情請看DataX3的transformer詳細(xì)介紹。
精準(zhǔn)的速度控制
還在為同步過程對在線存儲壓力影響而擔(dān)心嗎?新版本DataX3.0提供了包括通道(并發(fā))、記錄流、字節(jié)流三種流控模式,可以隨意控制你的作業(yè)速度,讓你的作業(yè)在庫可以承受的范圍內(nèi)達到最佳的同步速度。
"speed": {
"channel": 5,
"byte": 1048576,
"record": 10000
}
強勁的同步性能
DataX3.0每一種讀插件都有一種或多種切分策略,都能將作業(yè)合理切分成多個Task并行執(zhí)行,單機多線程執(zhí)行模型可以讓DataX速度隨并發(fā)成線性增長。在源端和目的端性能都足夠的情況下,單個作業(yè)一定可以打滿網(wǎng)卡。另外,DataX團隊對所有的已經(jīng)接入的插件都做了極致的性能優(yōu)化,并且做了完整的性能測試。性能測試相關(guān)詳情可以參照每單個數(shù)據(jù)源的詳細(xì)介紹:DataX數(shù)據(jù)源指南
健壯的容錯機制
DataX作業(yè)是極易受外部因素的干擾,網(wǎng)絡(luò)閃斷、數(shù)據(jù)源不穩(wěn)定等因素很容易讓同步到一半的作業(yè)報錯停止。因此穩(wěn)定性是DataX的基本要求,在DataX 3.0的設(shè)計中,重點完善了框架和插件的穩(wěn)定性。目前DataX3.0可以做到線程級別、進程級別(暫時未開放)、作業(yè)級別多層次局部/全局的重試,保證用戶的作業(yè)穩(wěn)定運行。
-
線程內(nèi)部重試
DataX的核心插件都經(jīng)過團隊的全盤review,不同的網(wǎng)絡(luò)交互方式都有不同的重試策略。
-
線程級別重試
目前DataX已經(jīng)可以實現(xiàn)TaskFailover,針對于中間失敗的Task,DataX框架可以做到整個Task級別的重新調(diào)度。
極簡的使用體驗
易用:下載即可用,支持linux和windows,只需要短短幾步驟就可以完成數(shù)據(jù)的傳輸。請點擊:Quick Start
詳細(xì):DataX在運行日志中打印了大量信息,其中包括傳輸速度,Reader、Writer性能,進程CPU,JVM和GC情況等等。
傳輸過程中打印傳輸速度、進度
傳輸過程中會打印進程相關(guān)的CPU、JVM
任務(wù)結(jié)束后,打印總體運行情況
參考文章來源:http://www.zghlxwxcb.cn/news/detail-711507.html
- https://github.com/alibaba/DataX
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!文章來源地址http://www.zghlxwxcb.cn/news/detail-711507.html
到了這里,關(guān)于00-開源離線同步工具DataX3.0重磅詳解!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!