阿裡DataX極簡教程

来源:https://www.cnblogs.com/Naylor/p/18196375
-Advertisement-
Play Games

目錄簡介工作流程核心架構核心模塊介紹DataX調度流程支持的數據實踐下載環境執行流程引用 簡介 DataX是一個數據同步工具,可以將數據從一個地方讀取出來並以極快的速度寫入另外一個地方。常見的如將mysql中的數據同步到另外一個mysql中,或者另外一個mongodb中。 工作流程 read:設置一 ...


目錄

簡介

DataX是一個數據同步工具,可以將數據從一個地方讀取出來並以極快的速度寫入另外一個地方。常見的如將mysql中的數據同步到另外一個mysql中,或者另外一個mongodb中。

工作流程

  • read:設置一個源,DataX從源讀取數據
  • write:設置一個目的地,DataX將讀取到的數據寫入目的地
  • setting:同步設置,如設置併發通道、控製作業速度等
  • Framework:Framework用於連接reader和writer,作為兩者的數據傳輸通道,並處理緩衝,流控,併發,數據轉換等核心技術問題
  • 多線程:充分利用多線程來處理同步任務

核心架構

核心模塊介紹

1:DataX完成單個數據同步的作業,我們稱之為Job,DataX接受到一個Job之後,將啟動一個進程來完成整個作業同步過程。DataX Job模塊是單個作業的中樞管理節點,承擔了數據清理、子任務切分(將單一作業計算轉化為多個子Task)、TaskGroup管理等功能。

2:DataXJob啟動後,會根據不同的源端切分策略,將Job切分成多個小的Task(子任務),以便於併發執行。Task便是DataX作業的最小單元,每一個Task都會負責一部分數據的同步工作。

3:切分多個Task之後,DataX Job會調用Scheduler模塊,根據配置的併發數據量,將拆分成的Task重新組合,組裝成TaskGroup(任務組)。每一個TaskGroup負責以一定的併發運行完畢分配好的所有Task,預設單個任務組的併發數量為5

4:每一個Task都由TaskGroup負責啟動,Task啟動後,會固定啟動Reader—>Channel—>Writer的線程來完成任務同步工作

5:DataX作業運行起來之後, Job監控並等待多個TaskGroup模塊任務完成,等待所有TaskGroup任務完成後Job成功退出。否則,異常退出,進程退出值非0

DataX調度流程

舉例來說,用戶提交了一個DataX作業,並且配置了20個併發,目的是將一個100張分表的mysql數據同步到odps裡面。 DataX的調度決策思路是:

  • DaXJob根據分庫分表切分成了100個Task。

  • 根據20個併發,DataX計算共需要分配4個TaskGroup。

  • 4個TaskGroup平分切分好的100個Task,每一個TaskGroup負責以5個併發共計運行25個Task。

支持的數據

類型 數據源 Reader(讀) Writer(寫) 文檔
RDBMS 關係型資料庫 MySQL
Oracle
OceanBase
SQLServer
PostgreSQL
DRDS
達夢
通用RDBMS(支持所有關係型資料庫)
阿裡雲數倉數據存儲 ODPS
ADS
OSS
OCS
NoSQL數據存儲 OTS
Hbase0.94
Hbase1.1
MongoDB
Hive
無結構化數據存儲 TxtFile
FTP
HDFS
Elasticsearch

實踐

作為極簡教程,本文將從mysql中讀取一張表的數據,然後同步到clickhouse中。

下載

打開該項目的Github 首頁進行下載:https://github.com/alibaba/DataX

下載鏈接:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz

下載下來是一個tar.gz的包,windows下解壓命令:


tar  -zxvf  xxx.tar.gz

程式目錄:

  • bin:使用裡面的 datax.py 來啟動程式
  • job:裡面放了一個job.json,用來檢查運行環境,一般的建議下載完畢之後執行一次。
  • log:存放執行日誌
  • plugin:插件集,插件分為read和write,分別對應datax可支持的資料庫
  • 其他目錄:......

環境

DataX是基於python和java的,需要機器擁有python和java 的運行環境。

在下載完畢後,通過執行自檢腳本,可確認環境是否正確



 python {YOUR_DATAX_HOME}/bin/datax.py {YOUR_DATAX_HOME}/job/job.json

執行流程

編寫同步任務配置文件,在job目錄中創建 mysql-to-clickhouse.json 文件,並填入如下內容



{
    "job": {
        "setting": {
            "speed": {
                "channel": 3
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.02
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "xxx",
                        "password": "xxx",
                        "column": [
                            "id",
                            "name"
                        ],
                        "splitPk": "id",
                        "connection": [
                            {
                                "table": [
                                    "table_name"
                                ],
                                "jdbcUrl": [
                                    "jdbc:mysql://192.168.1.xxx:xxx/db_name"
                                ]
                            }
                        ]
                    }
                },
                "writer": {
                    "name": "clickhousewriter",
                    "parameter": {
                        "username": "xxx",
                        "password": "xxx",
                        "column": [
                            "id",
                            "ame"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:clickhouse://192.168.1.xxx:xxx/table_name",
                                "table": [
                                    "table_name"
                                ]
                            }
                        ],
                        "preSql": [],
                        "postSql": [],
                        "batchSize": 65536,
                        "batchByteSize": 134217728,
                        "dryRun": false,
                        "writeMode": "insert"
                    }
                }
            }
        ]
    }
}



  • job:一個job包含兩個部分,setting中設置任務的執行速度,錯誤限制等,content中是任務具體的描述。
  • reader:任務的數據輸入源
  • writer:任務的數據輸出源

根據任務配置文件啟動datax,先cd到datax的根目錄


python bin/datax.py    job/mysql-to-clickhouse.json


運行上述命令後,任務就開啟了。本例從mysql資料庫中的一張表中讀取了兩個欄位(id,name),然後同步到clickhouse中,clickhouse中需要先創建同樣的庫,表和列。

任務執行非常快,140W數據僅用了 18s 就完成了同步。



2024-05-16 16:24:57.312 [job-0] INFO  JobContainer -
任務啟動時刻                    : 2024-05-16 16:24:38
任務結束時刻                    : 2024-05-16 16:24:57
任務總計耗時                    :                 18s
任務平均流量                    :            2.21MB/s
記錄寫入速度                    :         142425rec/s
讀出記錄總數                    :             1424252
讀寫失敗總數                    :                   0


引用

郵箱:[email protected] 技術交流QQ群:1158377441 歡迎關註我的微信公眾號【TechnologyRamble】,後續博文將在公眾號首發: pSr8iCD.png
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一般我們在開發的時候,習慣上使用常規的關係型資料庫來設計資料庫表,對於一些業務表的欄位比較固定的場景,是一種非常不錯的選擇,而且查詢的時候,由於是基於固定的表欄位進行查詢,性能基本上是最優的。不過有一些場景下,業務信息的經常變化,使用常規的關係型資料庫來創建表欄位、刪除欄位的模式,肯定不是合適的處理... ...
  • 項目場景: 之前正式一直都是使用的手動註冊,而且測試環境還沒有註冊上去,但是最近開發的需要每天在測試上跑跑看,再上生產,所以這次要解決掉。 問題描述 我是測試環境和正式環境都在一臺機子上,兩個環境項目跑不同的docker容器,我要做的是這兩個容器裡面的項目都註冊到我的xxl服務上去。 而且之前情況是 ...
  • 1、先將字體複製到目錄:\vendor\mpdf\mpdf\ttfonts2、再修改文件\vendor\mpdf\mpdf\src\Config\FontVariables.php,對照已經添加的simsun,simkai,simhei,fangzhenweibei,fangzhenheiti等字體 ...
  • nginx 反向代理是什麼? nginx 反向代理是一種網路伺服器架構模式,它通過將客戶端的請求轉發到後端伺服器,來提供負載均衡、高可用性、安全性等功能。 在這種架構中,nginx 作為反向代理伺服器,接收來自客戶端的請求,並將請求轉發到後端伺服器上。 在反向代理架構中,客戶端不直接訪問後端伺服器, ...
  • 請註意以下繼承體系中各class的constructors寫法: 1 class CPoint 2 { 3 public: 4 CPoint(float x=0.0) 5 :_x(x){} 6 7 float x() {return _x;} 8 void x(float xval){_x=xval ...
  • NumPy 分割數組 NumPy 提供了 np.array_split() 函數來分割數組,將一個數組拆分成多個較小的子數組。 基本用法 語法: np.array_split(array, indices_or_sections, axis=None) array: 要分割的 NumPy 數組。 i ...
  • REST(Representational State Transfer),表現形式狀態轉換,它是一種軟體架構風格 當我們想表示一個網路資源的時候,可以使用兩種方式: 傳統風格資源描述形式 http://localhost/user/getById?id=1 查詢id為1的用戶信息 http://l ...
  • title: Django 自定義管理命令:從入門到高級 date: 2024/5/16 18:34:29 updated: 2024/5/16 18:34:29 categories: 後端開發 tags: Django 自定義命令 入門教程 高級技巧 命令創建 命令使用 自定義管理 第 1 章 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...