DataX:一個開源的離線數據同步工具

DataX 是一個異構數據源離線同步(ETL)工具,實現了包括關系型數據庫(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各種異構數據源之間穩定高效的數據同步功能。它也是阿里云 DataWorks 數據集成功能的開源版本。

在這里插入圖片描述

為了解決異構數據源同步問題,DataX 將復雜的網狀的同步鏈路變成了星型數據鏈路,DataX 作為中間傳輸載體負責連接各種數據源。當需要接入一個新的數據源的時候,只需要將此數據源對接到 DataX,便能跟已有的數據源做到無縫數據同步。

體系原理

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

在這里插入圖片描述

其中,

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

DataX 開源版本支持單機多線程模式完成同步作業運行,以下是一個 DataX 作業生命周期的時序圖:

在這里插入圖片描述

其中涉及的核心模塊和流程如下:

  1. DataX 完成單個數據同步的作業稱之為 Job,DataX 接受到一個 Job 之后,將啟動一個進程來完成整個作業同步過程。DataX
    Job 模塊是單個作業的中樞管理節點,承擔了數據清理、子任務切分(將單一作業計算轉化為多個子 Task)、TaskGroup 管理等功能。
  2. DataX Job啟動后,會根據不同的源端切分策略,將 Job 切分成多個小的 Task(子任務),以便于并發執行。Task 是作業的最小單元,每一個 Task 都會負責一部分數據的同步工作。
  3. 切分多個 Task 之后,DataX Job會調用 Scheduler 模塊,根據配置的并發數據量,將拆分成的 Task 重新組合,組裝成 TaskGroup(任務組)。每一個 TaskGroup 負責以一定的并發運行完畢分配好的所有 Task,默認單個任務組的并發數量為 5。
  4. 每一個 Task 都由 TaskGroup 負責啟動,Task 啟動后,會固定啟動 Reader—>Channel—>Writer 的線程來完成任務同步工作。
  5. DataX 作業運行起來之后,Job 監控并等待多個 TaskGroup 模塊任務完成,等待所有 TaskGroup 任務完成后 Job 成功退出。否則,異常退出,進程退出值為非零。

舉例來說,用戶提交了一個 DataX 作業,并且配置了 20 個并發,目的是將一個 100 張分表的 MySQL 數據同步到 MaxCompute 里面。 DataX 的調度決策思路是:DataX Job 根據分庫分表切分成了 100 個子任務;根據 20 個并發,DataX 計算共需要分配 4 個 TaskGroup;4個任務組平分切分好的 100 個子任務,每一個任務組負責以 5 個并發共計運行 25 個子任務。

數據源

經過多年的積累,DataX 目前已經有了比較全面的插件體系,主流的 RDBMS 數據庫、NOSQL、大數據計算系統都已經接入。DataX 目前支持數據如下:

  • 關系型數據庫:包括 MySQL、Oracle、OceanBase、SQL Server、PostgreSQL、DRDS、金倉、高斯以及通用的 RDBMS 等;
  • 阿里云數倉數據存儲:包括 MaxCompute、AnalyticDB for MySQL、ADS、OSS、OCS、Hologres、AnalyticDB for PostgreSQL 等;
  • 阿里云中間件:數據總線 DataHub、日志服務 SLS;
  • 圖數據庫:阿里云 Graph Database、Neo4j;
  • NoSQL:阿里云 OTS、Hbase、Phoenix、MongoDB、Cassandra 等;
  • 數倉數據存儲:StarRocks、Apache Doris、ClickHouse、Databend、Hive、SelectDB 等;
  • 無結構化數據存儲:TxtFile、FTP、HDFS、Elasticsearch;
  • 時序數據庫:OpenTSDB、TSDB、TDengine。

DataX 框架提供了簡單的插件接入機制,只需要任意加上一種插件,就能無縫對接其他數據源。插件開發可以參考以下文章:

https://github.com/alibaba/DataX/blob/master/dataxPluginDev.md

快速體驗

通過 GitHub 或者直接輸入以下網址下載 DataX 工具包:

http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

解壓之后進入 bin 目錄即可運行作業,作業通過配置文件進行設置,可以通過以下命令查看配置模板:

$ cd  {YOUR_DATAX_HOME}/bin$  python datax.py -r streamreader -w streamwriter
DataX (UNKNOWN_DATAX_VERSION), From Alibaba !
Copyright (C) 2010-2015, Alibaba Group. All Rights Reserved.
Please refer to the streamreader document:https://github.com/alibaba/DataX/blob/master/streamreader/doc/streamreader.md Please refer to the streamwriter document:https://github.com/alibaba/DataX/blob/master/streamwriter/doc/streamwriter.md Please save the following configuration as a json file and  usepython {DATAX_HOME}/bin/datax.py {JSON_FILE_NAME}.json 
to run the job.{"job": {"content": [{"reader": {"name": "streamreader", "parameter": {"column": [], "sliceRecordCount": ""}}, "writer": {"name": "streamwriter", "parameter": {"encoding": "", "print": true}}}], "setting": {"speed": {"channel": ""}}}
}

其中,-r 用于指定 Reader,-w用于指定 Writer,示例中兩個都是 streamreader。安裝目錄下的 plugin 子目錄包含了所有的 Reader 和 Writer。

job 目錄提供了一個默認的作業配置 job.json,使用以下命令運行示例作業:

$ python datax.py ../job/job.json2025-05-17 15:00:02.135 [job-0] INFO  JobContainer - 
任務啟動時刻                    : 2025-05-17 15:00:02
任務結束時刻                    : 2025-05-17 15:00:22
任務總計耗時                    :                 20s
任務平均流量                    :               545/s
記錄寫入速度                    :           5000rec/s
讀出記錄總數                    :              100000
讀寫失敗總數                    :                   0

其他類型的數據源也可以按照相同的方式進行配置。

除了使用命令行和配置文件的方式運行作業之外,還可以通過圖形化的調度工具(例如 DataX-Web、Apache DolphinScheduler)進行管理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906419.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906419.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906419.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微軟家各種copilot的AI產品:Github copilot、Microsoft copilot

背景 大家可能聽到很多copilot,比如 Github Copilot,Microsoft Copilot、Microsoft 365 Copilot,有什么區別 Github Copilot:有網頁版、有插件(idea、vscode等的插件),都是面向于程序員的。Mi…

SpringMVC04所有注解按照使用位置劃分| 按照使用層級劃分(業務層、視圖層、控制層)

目錄 一、所有注解按照使用位置劃分(類、方法、參數) 1. 類級別注解 2. 方法級別注解 3. 參數級別注解 4. 字段/返回值注解 二、按照使用層級劃分(業務層、視圖層、控制層) 1、控制層(Controller Layer&#x…

std::chrono類的簡單使用實例及分析

author: hjjdebug date: 2025年 05月 20日 星期二 14:36:17 CST descrip: std::chrono類的簡單使用實例及分析 文章目錄 1.實例代碼:2. 代碼分析:2.1 auto t1 std::chrono::high_resolution_clock::now();2.1.1 什么是 system_clock2.1.2 什么是 chrono::time_point?2.1.3 什…

電子電路仿真實驗教學平臺重磅上線!——深圳航天科技創新研究院傾力打造,助力高校教學數字化轉型

在傳統電子電路課堂中,實驗室的燈光總與高昂的成本、擁擠的設備、反復的耗材損耗相伴,而教師不得不面對這樣的現實:有限的硬件資源束縛著教學深度,不可逆的實驗風險制約著創新探索,固化的時空場景阻礙著個性化學習。當…

面試真題 - 高并發場景下Nginx如何優化

Nginx是一款高性能的Web服務器和反向代理服務器,以其輕量級、高并發處理能力和穩定性聞名。在面對高并發場景時,合理的配置與優化策略至關重要,以確保服務的穩定性和響應速度。 以下是針對Nginx進行高并發優化的一些關鍵配置和策略&#xff…

算法與數據結構:質數、互質判定和裴蜀定理

文章目錄 質數質數判定質數篩選質因數分解互質判定裴蜀定理 質數 首先回顧「質數」的定義:若一個正整數無法被除了 1 ?和它自身之外的任何自然數整除,則稱該數為質數(或素數),否則稱該正整數為合數。 根據上述定義&…

代碼隨想錄算法訓練營第60期第四十二天打卡

大家好,今天還是繼續我們的動態規劃里面的背包問題,前面我們主要接觸的是0-1背包和完全背包,其實這兩個背包問題主要就是看看每一件物品我們是否有多件,如果每一件物品我們只能取一次的話那這樣我們就是0-1背包,如果每…

第41天-Python+Qt四屏播放器開發指南

一、技術選型與工具準備 核心庫: Pyqt5:Python標準GUI庫,構建用戶界面 os / sys:文件系統操作 開發環境: pip install pyqt5 最終效果與運行 import sys from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout # 添加缺失的布局管理器 from PyQt5.QtCore impor…

upload-labs通關筆記-第12關 文件上傳之白名單GET法

目錄 一、白名單過濾 二、%00截斷 1、%00截斷原理 2、空字符 3、截斷條件 &#xff08;1&#xff09;PHP版本 < 5.3.4 &#xff08;2&#xff09;magic_quotes_gpc配置為Off &#xff08;3&#xff09;代碼邏輯存在缺陷 三、源碼分析 1、代碼審計 &#xff08;1&…

Node.js數據抓取技術實戰示例

Node.js常用的庫有哪些呢&#xff1f;比如axios或者node-fetch用來發送HTTP請求&#xff0c;cheerio用來解析HTML&#xff0c;如果是動態網頁的話可能需要puppeteer這樣的無頭瀏覽器。這些工具的組合應該能滿足大部分需求。 然后&#xff0c;可能遇到的難點在哪里&#xff1f;…

數據結構(3)線性表-鏈表-單鏈表

我們學習過順序表時&#xff0c;一旦對頭部或中間的數據進行處理&#xff0c;由于物理結構的連續性&#xff0c;為了不覆蓋&#xff0c;都得移&#xff0c;就導致時間復雜度為O&#xff08;n&#xff09;&#xff0c;還有一個潛在的問題就是擴容&#xff0c;假如我們擴容前是10…

【Unity】DOTween的常用函數解釋

DOTween插件常用函數解釋 1.DOTween.To&#xff08;通用變化動畫&#xff09; 解釋&#xff1a;將某一個值在一定的時間內變化到另一個值&#xff08;通用的函數&#xff09;&#xff0c;可用于大部分的動畫變化 使用示例&#xff1a; using UnityEngine; using DG.Tweenin…

數據結構測試模擬題(1)

1、約瑟夫問題 #include<bits/stdc.h> using namespace std; const int N25; int e[N],ne[N],head-1,idx1; int n,m; void add_to_head(int x){e[idx]x;ne[idx]head;headidx; } void add(int k,int x){e[idx]x;ne[idx]ne[k];ne[k]idx; } int main(){cin>>n>>…

Helm配置之為特定Deployment配置特定Docker倉庫(覆蓋全局配置)

文章目錄 Helm配置之為特定Deployment配置特定Docker倉庫(覆蓋全局配置)需求方法1:使用Helm覆蓋值方法2: 在Lens中臨時修改Deployment配置步驟 1: 創建 Docker Registry Secret步驟 2: 在 Deployment 中引用 Secret參考資料Helm配置之為特定Deployment配置特定Docker倉庫(覆…

BERT 作為Transformer的Encoder 為什么采用可學習的位置編碼

摘要 BERT 在位置編碼上與原始 Transformer 論文中的 sin/cos 公式不同&#xff0c;選擇了可學習&#xff08;learned&#xff09;的位置嵌入方案。本文將從 Transformer 原始位置編碼選項入手&#xff0c;分析 BERT 選擇 learned positional embeddings 的四大核心原因&#x…

【Linux 學習計劃】-- gcc、g++、動靜態庫鏈接

目錄 什么是gcc、g gcc、g 相關操作詳解 預處理、編譯、匯編、鏈接來源 動靜態鏈接是什么 結語 什么是gcc、g gcc、g其實就是編譯器&#xff0c;是幫助我們從.c或者.cc&#xff0c;.cpp文件編譯成可執行程序的 其中&#xff0c;我們如果要編譯c語言文件的話&#xff0c;…

前端讀取本地項目中 public/a.xlsx 文件中的數據 vue3

前端讀取本地項目中 public/a.xlsx 文件中的數據 vue3 項目中需要在 Vue3 項目中讀取 public/a.xlsx 文件&#xff0c;可以使用 fetch API 來獲取文件內容 一、安裝 xlsx 首先&#xff0c;你需要安裝 xlsx 庫&#xff1a; npm install xlsx二、在需要用的頁面里引入xlsx im…

MySQL:to many connections連接數過多

當你遇到 MySQL: Too many connections 錯誤時&#xff0c;意味著當前連接數已達到 MySQL 配置的最大限制。這通常是由于并發連接過多或連接未正確關閉導致的。 一、查看當前連接數 查看 MySQL 當前允許的最大連接數 SHOW VARIABLES LIKE max_connections;查看當前使用的最大…

2024年熱門AI趨勢及回顧

人工智能的崛起 2024 年可能會被銘記為人工智能不再是一種技術新奇事物&#xff0c;而是成為現實的一年。微軟、Salesforce 和 Intuit 等巨頭將人工智能融入主流企業解決方案&#xff1b;從文案寫作到數據分析&#xff0c;專門的人工智能應用程序和服務如雨后春筍般涌現&#…

LangFlow技術深度解析:可視化編排LangChain應用的新范式 -(2)流編輯器系統

Flow Editor System | langflow-ai/langflow | DeepWiki 流編輯器系統 相關源文件 流編輯器系統是 Langflow 的核心交互式組件&#xff0c;允許用戶直觀地創建、編輯和管理 LLM 驅動的應用程序。它提供了一個直觀的畫布&#xff0c;用戶可以在其中添加節點、將其與邊緣連接并…