今天給大家分享一個(gè)阿里開源的數(shù)據(jù)同步工具DataX,在Github擁有14.8k的star,非常受歡迎,地址:https://github.com/alibaba/DataX
DataX 是阿里云 DataWorks數(shù)據(jù)集成 的開源版本,使用Java 語(yǔ)言編寫,在阿里巴巴集團(tuán)內(nèi)被廣泛使用的離線數(shù)據(jù)同步工具/平臺(tái)。DataX 實(shí)現(xiàn)了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databend 等各種異構(gòu)數(shù)據(jù)源之間高效的數(shù)據(jù)同步功能。
圖片
圖片
圖片
DataX作為離線數(shù)據(jù)同步框架,采用Framework + plugin架構(gòu)構(gòu)建。將數(shù)據(jù)源讀取和寫入抽象成為Reader/Writer插件,納入到整個(gè)同步框架中。
DataX 開源版本支持單機(jī)多線程模式完成同步作業(yè)運(yùn)行,如下圖
圖片
舉例來(lái)說(shuō),用戶提交了一個(gè)DataX作業(yè),并且配置了20個(gè)并發(fā),目的是將一個(gè)100張表的mysql數(shù)據(jù)同步到odps里面。DataX的調(diào)度決策是:
點(diǎn)擊datax 下載,下載后解壓至本地某個(gè)目錄,如下圖
圖片
這里為了方便演示,我們同步MySQL的user_info表至MySQL的ods_test_mysql_user_info_m,同步條件為更新時(shí)間字段,如下
在實(shí)際工作中你可以選擇不同類型的數(shù)據(jù)源測(cè)試
drop table ods_test_mysql_user_info_mCREATE 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 '手機(jī)', `address` varchar(1000) COMMENT '地址', `age` int COMMENT '年齡', `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '創(chuàng)建時(shí)間', `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改時(shí)間', 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 '手機(jī)', `address` varchar(1000) COMMENT '地址', `age` int COMMENT '年齡', `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '創(chuàng)建時(shí)間', `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改時(shí)間', PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='用戶信息數(shù)倉(cāng)表';在user_info表中插入數(shù)據(jù)如下
圖片
在 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" } } }}為了更貼合實(shí)際,寫一個(gè)調(diào)度腳本sync.sh支持動(dòng)態(tài)參數(shù)來(lái)執(zhí)行任務(wù)
#!/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 1jsnotallow=$1echo '執(zhí)行腳本:'$jsonScriptinterval=$2echo "時(shí)間間隔(分鐘):"$intervalnow_time=$(date '+%Y-%m-%d %H:%M:%S')echo "當(dāng)前時(shí)間:"$now_timeupdate_time=$(date -v -${interval}M '+%Y-%m-%d %H:%M:%S')#linux 更新時(shí)間獲取#update_time=$(date -d "${now_time} $interval minute ago" +"%Y-%m-%d %H:%M:%S")echo "更新時(shí)間:"$update_time#執(zhí)行python3 /Users/weizhao.dong/Documents/soft/datax/bin/datax.py $jsonScript -p "-DupdateTime='${update_time}'"假設(shè)我們要執(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進(jìn)行同步
圖片

圖片
以上結(jié)果可能有些人有疑問(wèn),就三條數(shù)據(jù)執(zhí)行時(shí)間為 10s,其實(shí)這個(gè) 10s主要是初始化時(shí)間,耗時(shí)過(guò)長(zhǎng),同步的數(shù)據(jù)量多了優(yōu)勢(shì)就體現(xiàn)出來(lái)了,以下為實(shí)際生產(chǎn)同步數(shù)據(jù)結(jié)果,可以看到同步63102條耗時(shí)22s
以上我們只是通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)演示了dataX如何使用,如果只是一次性同步,沒(méi)問(wèn)題,但是如果是周期性進(jìn)行同步,有以下幾種方式推薦
這種方式是最簡(jiǎn)單的,可以使用操作系統(tǒng)中的crontab定時(shí)調(diào)度,通過(guò)crontab -e編輯corn 任務(wù),添加對(duì)應(yīng)腳本即可
在種方式在大數(shù)據(jù)領(lǐng)域用的比較多,典型場(chǎng)景就是 mysql 同步到數(shù)倉(cāng),海豚調(diào)度器內(nèi)置了 datax 并且提供了圖形化配置界面,配置起來(lái)非常方便
圖片
圖片
同時(shí)每次執(zhí)行都有記錄,并且都有對(duì)應(yīng)的日志
圖片
定時(shí)調(diào)度框架都支持調(diào)度 shell 腳本,通過(guò)傳入對(duì)應(yīng)參數(shù)也可執(zhí)行
本文鏈接:http://m.www897cc.com/showinfo-26-72430-0.html什么是數(shù)據(jù)同步利器DataX,如何使用?
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com