資料同步Datax與Datax_web的部署以及使用說明

北京流浪兒發表於2021-07-01

一、DataX3.0概述

DataX 是一個異構資料來源離線同步工具,致力於實現包括關係型資料庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構資料來源之間穩定高效的資料同步功能。

請看下圖:

設計理念:

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

當前使用狀況:

DataX在阿里巴巴集團內被廣泛使用,承擔了所有大資料的離線同步業務,並已持續穩定執行了6年之久。目前每天完成同步8w多道作業,每日傳輸資料量超過300TB。

二、DataX3.0框架設計

DataX本身作為離線資料同步框架,採用Framework + plugin架構構建。將資料來源讀取和寫入抽象成為Reader/Writer外掛,納入到整個同步框架中。

1、Reader:Reader為資料採集模組,負責採集資料來源的資料,將資料傳送給Framework。

2、Writer: Writer為資料寫入模組,負責不斷向Framework取資料,並將資料寫入到目的端。

3、Framework:Framework用於連線reader和writer,作為兩者的資料傳輸通道,並處理緩衝,流控,併發,資料轉換等核心技術問題。

三、外掛體系

DataX目前已經有了比較全面的外掛體系,主流的RDBMS資料庫、NOSQL、大資料計算系統都已經接入。

DataX目前支援資料如下:

四、DataX3.0核心架構

DataX 3.0 開源版本支援單機多執行緒模式完成同步作業執行,按一個DataX作業生命週期的時序圖,從整體架構設計非常簡要說明DataX各個模組相互關係。

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資料同步到odbs裡面。 DataX的排程決策思路是:

1、DataXJob根據分庫分表切分成了100個Task。

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

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

六、Datax3.0安裝部署

1、環境準備

Linux
jdk 1.8
python 2.7.5(datax是由python2開發的)

2、datax下載地址

https://github.com/alibaba/DataX?spm=a2c4e.11153940.blogcont59373.11.7a684c4fvubOe1

檢視安裝成功:在bin目錄下執行 python datax.py ../job/job.json

3、檢視配置檔案

在bin目錄下已經給出了樣例配置,但不同的資料來源配置檔案不一樣。通過命令檢視配置模板
# python datax.py -r {YOUR_READER} -w {YOUR_WRITER}
示例:[xxx@xxxbin]$ python datax.py -r mysqlreader -w hdfswriter

七、json配置檔案模板說明

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "querySql": "", #自定義sql,支援多表關聯,當使用者配置querySql時,直接忽略table、column、where條件的配置。
                        "fetchSize": "", #預設1024,該配置項定義了外掛和資料庫伺服器端每次批量資料獲取條數,該值決定了DataX和伺服器端的網路互動次數,能夠較大的提升資料抽取效能,注意,該值過大(>2048)可能造成DataX程式OOM
                        "splitPk": "db_id", #僅支援整形型資料切分;如果指定splitPk,表示使用者希望使用splitPk代表的欄位進行資料分片,如果該值為空,代表不切分,使用單通道進行抽取
                        "column": [], #"*"預設所有列,支援列裁剪,列換序
                        "connection": [
                            {
                                "jdbcUrl": ["jdbc:mysql://IP:3306/database?useUnicode=true&characterEncoding=utf8"], 
                                "table": [] #支援多張表同時抽取
                            }
                        ],
                        "password": "",
                        "username": "",
                        "where": "" #指定的column、table、where條件拼接SQL,可以指定limit 10,也可以增量資料同步,如果該值為空,代表同步全表所有的資訊
                    }
                },
                "writer": {
                    "name": "hdfswriter",
                    "parameter": {
                        "column": [], #必須指定欄位名,欄位型別,{"name":"","tpye":""}
                        "compress": "", #hdfs檔案壓縮型別,預設不填寫意味著沒有壓縮。其中:text型別檔案支援壓縮型別有gzip、bzip2;orc型別檔案支援的壓縮型別有NONE、SNAPPY(需要使用者安裝SnappyCodec)。 
                        "defaultFS": "", #Hadoop hdfs檔案系統namenode節點地址。
                        "fieldDelimiter": "", #需要使用者保證與建立的Hive表的欄位分隔符一致
                        "fileName": "", #HdfsWriter寫入時的檔名,需要指定表中所有欄位名和欄位型別,其中:name指定欄位名,type指定欄位型別。 
                        "fileType": "", #目前只支援使用者配置為”text”或”orc”
                        "path": "", #儲存到Hadoop hdfs檔案系統的路徑資訊,hive表在hdfs上的儲存路徑
                        "hadoopConfig": {} #hadoopConfig裡可以配置與Hadoop相關的一些高階引數,比如HA的配置。 
                        "writeMode": "" #append,寫入前不做任何處理,檔名不衝突;nonConflict,如果目錄下有fileName字首的檔案,直接報錯。 
                    }
                }
            }
        ],
        "setting": {
            "speed": { #流量控制
                "byte": 1048576, #控制傳輸速度,單位為byte/s,DataX執行會盡可能達到該速度但是不超過它
                "channel": ""  #控制同步時的併發數
                    }
            "errorLimit": { #髒資料控制
                "record": 0 #對髒資料最大記錄數閾值(record值)或者髒資料佔比閾值(percentage值,當數量或百分比,DataX Job報錯退出
            }
        }
    }
}
{
    "job":{
        "setting":{
            "speed":{
            	"channel":1
            }
        },
        "content":[
            {
                "reader":{
                    "name":"sqlserverreader",
                    "parameter":{
                        "username":"xxxx",
                        "password":"xxxx",
                        "column":[
                        	"UserGroupId",
                        	"Name"
                        ],
                        "connection":[
                            {
                                "table": [
                                    "UserGroups"
                                ],
                                "jdbcUrl":[
                                    "jdbc:sqlserver://xxxx:1433;DatabaseName=TEST"
                                ]
                            }
                        ]
                    }
                },
                "writer":{
                    "name":"mysqlwriter",
                    "parameter":{
                    	"username":"xxxx",
                    	"password":"xxxx",
                    	"column":[
                        	"user_group_id",
                        	"user_group_name"
                        ],
                    	"connection":[
                            {
                                "jdbcUrl": "jdbc:mysql://xxxx:3306/test_recruit", 
                                "table": ["gcp_user_groups"]
                            }
                        ],
                        "visible":false,
                        "encoding":"UTF-8"
                    }
                }
            }
        ]
    }
}

 八、datax-web安裝

1、參考官方的安裝,包可以這裡下載

https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md

2、在選定的安裝目錄,解壓安裝包

tar -zxvf datax-web-{VERSION}.tar.gz

3、執行安裝指令碼(需要安裝資料庫mysql)

[root@roobbin datax-web-2.1.2]# ./bin/install.sh 
2020-10-17 10:00:09.430 [INFO] (22745) Creating directory: [/usr/local/datax-web-2.1.2/bin/../modules].
2020-10-17 10:00:09.459 [INFO] (22745)  ####### Start To Uncompress Packages ######
2020-10-17 10:00:09.462 [INFO] (22745) Uncompressing....
Do you want to decompress this package: [datax-admin_2.1.2_1.tar.gz]? (Y/N)y
2020-10-17 10:00:17.298 [INFO] (22745)  Uncompress package: [datax-admin_2.1.2_1.tar.gz] to modules directory
Do you want to decompress this package: [datax-executor_2.1.2_1.tar.gz]? (Y/N)

按照提示輸入資料庫地址,埠號,使用者名稱,密碼以及資料庫名稱,大部分情況下即可快速完成初始化。 如果服務上並沒有安裝mysql命令,則可以取用目錄下/bin/db/datax-web.sql指令碼去手動執行,完成後修改相關配置檔案

vi ./modules/datax-admin/conf/bootstrap.properties
#Database
#DB_HOST=
#DB_PORT=
#DB_USERNAME=
#DB_PASSWORD=
#DB_DATABASE=

 

在專案目錄下/modules/datax-execute/bin/env.properties 指定PYTHON_PATH的路徑
vi ./modules/{module_name}/bin/env.properties

### 執行datax的python指令碼地址
PYTHON_PATH=

### 保持和datax-admin服務的埠一致;預設是9527,如果沒改datax-admin的埠,可以忽略
DATAX_ADMIN_PORT=

 

4、啟動DataX_web

./bin/start-all.sh

進入視覺化介面

http://ip:9527/index.html

登陸使用者名稱admin 密碼123456

資料同步Datax與Datax_web的部署以及使用說明

over!

 

相關文章