成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么是數(shù)據(jù)同步利器DataX,如何使用?

開發(fā) 開發(fā)工具
DataX 是阿里云 DataWorks數(shù)據(jù)集成 的開源版本,使用Java 語言編寫,在阿里巴巴集團內被廣泛使用的離線數(shù)據(jù)同步工具/平臺。

今天給大家分享一個阿里開源的數(shù)據(jù)同步工具DataX,在Github擁有14.8k的star,非常受歡迎,地址:https://github.com/alibaba/DataX

什么是 Datax?

DataX 是阿里云 DataWorks數(shù)據(jù)集成 的開源版本,使用Java 語言編寫,在阿里巴巴集團內被廣泛使用的離線數(shù)據(jù)同步工具/平臺。DataX 實現(xiàn)了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databend 等各種異構數(shù)據(jù)源之間高效的數(shù)據(jù)同步功能。

圖片圖片

應用場景有那些?

  1. 數(shù)據(jù)倉庫同步:DataX 可以幫助將數(shù)據(jù)從一個數(shù)據(jù)倉庫(如關系型數(shù)據(jù)庫、大數(shù)據(jù)存儲系統(tǒng)等)同步到另一個數(shù)據(jù)倉庫,實現(xiàn)數(shù)據(jù)的遷移、備份或復制。
  2. 數(shù)據(jù)庫遷移:當我們需要將數(shù)據(jù)從一個數(shù)據(jù)庫平臺遷移到另一個數(shù)據(jù)庫平臺時,DataX 可以幫助完成數(shù)據(jù)的轉移和轉換工作
  3. 數(shù)據(jù)集成與同步:DataX 可以用作數(shù)據(jù)集成工具,用于將多個數(shù)據(jù)源的數(shù)據(jù)進行整合和同步。它支持多種數(shù)據(jù)源,包括關系型數(shù)據(jù)庫、NoSQL 數(shù)據(jù)庫、文件系統(tǒng)等,可以將這些數(shù)據(jù)源的數(shù)據(jù)整合到一個目標數(shù)據(jù)源中。
  4. 數(shù)據(jù)清洗與轉換:DataX 提供了豐富的數(shù)據(jù)轉換能力,可以對數(shù)據(jù)進行清洗、過濾、映射、格式轉換等操作。這對于數(shù)據(jù)倉庫、數(shù)據(jù)湖和數(shù)據(jù)集市等數(shù)據(jù)存儲和分析平臺非常有用,可以幫助提高數(shù)據(jù)質量和一致性。
  5. 數(shù)據(jù)備份與恢復:DataX 可以用于定期備份和恢復數(shù)據(jù)。通過配置定時任務,可以將數(shù)據(jù)從源端備份到目標端,并在需要時進行數(shù)據(jù)恢復。

DataX支持那些數(shù)據(jù)源?

圖片圖片

架構設計

圖片圖片

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

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

DataX 開源版本支持單機多線程模式完成同步作業(yè)運行,如下圖

圖片圖片

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

DataX調度流程

舉例來說,用戶提交了一個DataX作業(yè),并且配置了20個并發(fā),目的是將一個100張表的mysql數(shù)據(jù)同步到odps里面。DataX的調度決策是:

  1. Job根據(jù)分表切分成了100個Task。
  2. 根據(jù)20個并發(fā),DataX計算需要分配4個TaskGroup。
  3. 4個TaskGroup平分切分好的100個Task,每一個TaskGroup負責5個并發(fā)共計運行25個Task。

如何使用 Datax?

點擊datax 下載,下載后解壓至本地某個目錄,如下圖

圖片圖片

用例說明

這里為了方便演示,我們同步MySQL的user_info表至MySQL的ods_test_mysql_user_info_m,同步條件為更新時間字段,如下

在實際工作中你可以選擇不同類型的數(shù)據(jù)源測試

drop table ods_test_mysql_user_info_m

CREATE TABLE `user_info` (
  `id` int NOT NULL COMMENT 'ID',
  `name` varchar(50) NOT NULL COMMENT '名稱',
  `sex` tinyint NOT NULL COMMENT '性別 1男 2女',
  `phone` varchar(11) COMMENT '手機',
 `address` varchar(1000)  COMMENT '地址',
 `age` int  COMMENT '年齡',
 `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '創(chuàng)建時間',
  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改時間',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='用戶信息表';

CREATE TABLE `ods_test_mysql_user_info_m` (
  `id` int NOT NULL COMMENT 'ID',
  `name` varchar(50) NOT NULL COMMENT '名稱',
  `sex` tinyint NOT NULL COMMENT '性別 1男 2女',
  `phone` varchar(11) COMMENT '手機',
 `address` varchar(1000)  COMMENT '地址',
 `age` int  COMMENT '年齡',
 `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '創(chuàng)建時間',
  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改時間',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='用戶信息數(shù)倉表';

在user_info表中插入數(shù)據(jù)如下

圖片圖片

創(chuàng)建作業(yè)的配置文件(json格式)

在 datax 的 script 目錄,創(chuàng)建ods_test_mysql_user_info_m.json文件,配置如下,mysqlreader表示讀取端,mysqlwriter表示寫入端

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "column": ["id","name","sex","phone","address","age","create_time","update_time"],
                       "splitPk": "id",
                        "connection": [
                            {
                                "jdbcUrl": ["jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false"],
                                "table": ["user_info"]
                            }
                        ],
                        "password": "root",
                        "username": "root",
                        "where": "update_time > '${updateTime}' "
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                       "writeMode": "replace",
                        "column": ["id","name","sex","phone","address","age","create_time","update_time"],
                        "connection": [
                            {
                                "jdbcUrl":"jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false",
                                "table": ["ods_test_mysql_user_info_m"]
                            }
                        ],
                        "username": "root",
                        "password": "root",
                        "preSql": [],
                        "session": [
                          "set session sql_mode='ANSI'"
                        ]

                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": "5"
            }
        }
    }
}

創(chuàng)建執(zhí)行腳本

為了更貼合實際,寫一個調度腳本sync.sh支持動態(tài)參數(shù)來執(zhí)行任務

#!/bin/bash
## 執(zhí)行示例 sh /Users/weizhao.dong/Documents/soft/datax/datax-script/call.sh /Users/weizhao.dong/Documents/soft/datax/datax-script/dwd_g2park_inout_report_s.json 1
jsnotallow=$1
echo '執(zhí)行腳本:'$jsonScript
interval=$2
echo "時間間隔(分鐘):"$interval
now_time=$(date '+%Y-%m-%d %H:%M:%S')
echo "當前時間:"$now_time
update_time=$(date -v -${interval}M  '+%Y-%m-%d %H:%M:%S')
#linux 更新時間獲取
#update_time=$(date -d "${now_time} $interval minute ago" +"%Y-%m-%d %H:%M:%S")
echo "更新時間:"$update_time
#執(zhí)行
python3 /Users/weizhao.dong/Documents/soft/datax/bin/datax.py $jsonScript -p "-DupdateTime='${update_time}'"

假設我們要執(zhí)以上ods_test_mysql_user_info_m.json腳本,并且同步十分鐘之前的數(shù)據(jù),如下

./sync.sh ods_test_mysql_user_info_m.json 10

測試

圖片圖片

執(zhí)行./sync.sh ods_test_mysql_user_info_m.json 10進行同步

圖片圖片

圖片

圖片圖片

以上結果可能有些人有疑問,就三條數(shù)據(jù)執(zhí)行時間為 10s,其實這個 10s主要是初始化時間,耗時過長,同步的數(shù)據(jù)量多了優(yōu)勢就體現(xiàn)出來了,以下為實際生產同步數(shù)據(jù)結果,可以看到同步63102條耗時22s

推薦用法

以上我們只是通過一個簡單的示例來演示了dataX如何使用,如果只是一次性同步,沒問題,但是如果是周期性進行同步,有以下幾種方式推薦

crontab調度

這種方式是最簡單的,可以使用操作系統(tǒng)中的crontab定時調度,通過crontab -e編輯corn 任務,添加對應腳本即可

海豚調度器

在種方式在大數(shù)據(jù)領域用的比較多,典型場景就是 mysql 同步到數(shù)倉,海豚調度器內置了 datax 并且提供了圖形化配置界面,配置起來非常方便

圖片圖片

圖片圖片

同時每次執(zhí)行都有記錄,并且都有對應的日志

圖片圖片

定時任務框架(elasticjob/xxl-job)

定時調度框架都支持調度 shell 腳本,通過傳入對應參數(shù)也可執(zhí)行

圖片 圖片

責任編輯:武曉燕 來源: 架構成長指南
相關推薦

2016-08-21 14:19:05

數(shù)據(jù)工具DataXSqoop

2024-09-14 10:39:21

瀏覽器區(qū)域導航

2020-09-21 06:53:41

NoSQL高并發(fā)面試

2024-04-10 10:11:14

藍牙藍牙網關

2024-02-29 08:02:27

KubernetesDaemonSet集群

2023-03-17 18:58:36

日志查詢同步

2023-09-07 08:15:58

場景同步異步

2023-06-05 08:00:00

mTLSIstio安全

2020-11-17 14:28:56

數(shù)據(jù)中心

2022-04-26 16:56:20

行為數(shù)據(jù)數(shù)據(jù)

2023-11-09 12:59:00

微力同步數(shù)據(jù)傳輸工具

2016-08-18 01:45:05

數(shù)據(jù)科學數(shù)據(jù)產品

2022-02-27 15:28:53

大數(shù)據(jù)挑戰(zhàn)戰(zhàn)略

2021-02-18 09:23:47

數(shù)據(jù)庫分區(qū)數(shù)據(jù)庫倉庫

2014-04-08 10:55:15

2017-12-19 21:29:58

物聯(lián)網區(qū)塊鏈大數(shù)據(jù)

2020-04-14 14:50:13

ArchLinuxAUR

2023-09-15 16:14:14

2013-03-06 16:06:31

2010-05-20 11:08:27

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩三区在线 | 精品国产欧美一区二区 | 超碰精品在线 | 91精品国产综合久久福利软件 | 国产伦精品一区二区三区在线 | 日韩一区二区在线视频 | 一二三在线视频 | 中文字幕在线免费观看 | 成人精品一区二区三区中文字幕 | 涩涩视频网站在线观看 | 免费观看的av毛片的网站 | 国内自拍偷拍 | jizz在线看片 | 久草免费在线视频 | 亚洲精品乱码久久久久久蜜桃91 | 欧美电影免费观看高清 | 日本成年免费网站 | 久久综合久色欧美综合狠狠 | 免费国产黄网站在线观看视频 | 亚洲va国产日韩欧美精品色婷婷 | 免费av直接看 | 精品久久国产 | 国产中文原创 | 日韩精品在线观看一区二区 | 欧美精品乱码久久久久久按摩 | 国产一区三区在线 | 一区二区中文字幕 | 91久久久久久久久久久 | 在线播放国产一区二区三区 | 国产精品美女久久久免费 | 国产精品特级毛片一区二区三区 | 久久伦理电影 | 国产精品精品久久久 | 亚洲一区电影 | 天天操夜夜操 | 久久久青草婷婷精品综合日韩 | 国产精品电影网 | a a毛片 | 国产精品1区2区 | 欧美一级www片免费观看 | 久久伊人亚洲 |