ETL工具--DataX3.0實戰java
DataX是一個在異構的數據庫/文件系統之間高速交換數據的工具,實現了在任意的數據處理系統(RDBMS/Hdfs/Local filesystem)之間的數據交換,由淘寶數據平臺部門完成。 python
DataX插件分爲Reader和Writer兩類。Reader負責從數據源端讀取數據到Storage(交換空間),Writer負責將Storage中的數據寫入到數據目的端。Storage能夠適配不一樣種類的Reader和Writer,從而實現數據同步. mysql
目前DataX版本已經提供的Reader插件以下: git
一、 hdfsreader : 支持從hdfs文件系統獲取數據。 github
二、mysqlreader: 支持從mysql數據庫獲取數據。 sql
三、 sqlserverreader: 支持從sqlserver數據庫獲取數據。 數據庫
四、 oraclereader : 支持從oracle數據庫獲取數據。 json
五、 streamreader: 支持從stream流獲取數據(經常使用於測試) vim
六、httpreader : 支持從http URL獲取數據。 centos
提供的Writer插件以下:
一、 hdfswriter :支持向hdbf寫入數據。
二、 mysqlwriter :支持向mysql寫入數據。
三、 sqlserverwriter:支持向sqlserver寫入數據。
四、 oraclewriter :支持向oracle寫入數據。
五、 streamwriter :支持向stream流寫入數據。(經常使用於測試)
DataX 3.0每一種讀插件都有一種或多種切分策略,都能將做業合理切分紅多個Task並行執行,單機多線程執行模型可讓DataX速度隨併發成線性增加。 在源端和目的端性能都足夠的狀況下,單個做業必定能夠打滿網卡。
環境準備:
centos 7.2
python 2.7.5
工具包:datax.tar.gz (3.0)
SQL SERVER JDBC驅動:sqljdbc_6.0
JAVA環境準備:
# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel #安裝openjdk
標準方式配置環境變量:
# vim /etc/profile
將下面的三行粘貼到 /etc/profile中:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
下載datax,解壓縮,賦權限,及運行樣例同步做業命令
# wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz # tar -zxvf datax.tar.gz -C /usr/local/ # chmod -R 755 /usr/local/datax/* # cd /usr/local/datax # python datax.py ../job/job.json
2017-03-02 18:15:10.864 [main] INFO Engine - the machine info => osInfo:Oracle Corporation 1.8 25.121-b13 jvmInfo:Linux amd64 3.10.0-327.el7.x86_64 cpu num:2 totalPhysicalMemory:-0.00G freePhysicalMemory:-0.00G maxFileDescriptorCount:-1 currentOpenFileDescriptorCount:-1 GC Names[Copy, MarkSweepCompact] MEMORY_NAME | allocation_size | init_size Eden Space | 273.06MB | 273.06MB Code Cache | 240.00MB | 2.44MB Survivor Space | 34.13MB | 34.13MB Compressed Class Space | 1,024.00MB | 0.00MB Metaspace | -0.00MB | 0.00MB Tenured Gen | 682.69MB | 682.69MB 2017-03-02 18:15:21.095 [job-0] INFO JobContainer - 任務啓動時刻 : 2017-03-02 18:15:10 任務結束時刻 : 2017-03-02 18:15:21 任務總計耗時 : 10s 任務平均流量 : 253.91KB/s 記錄寫入速度 : 10000rec/s 讀出記錄總數 : 100000 讀寫失敗總數 : 0
下載sqljdbc_6.0.8112.100_enu.tar.gz驅動:wget https://download.microsoft.com/download/0/2/A/02AAE597-3865-456C-AE7F-613F99F850A8/enu/sqljdbc_6.0.8112.100_enu.tar.gz
解壓並把sqljdbc42.jar文件移至/usr/local/datax/lib目錄下,並受權
#tar -xf sqljdbc_6.0.8112.100_enu.tar.gz #mv /sqljdbc_6.0/enu/jre8/sqljdbc42.jar /usr/local/datax/lib/ #chmod 755 /usr/local/datax/lib/sqljdbc42.jar
配置文件部分
只要執行一個python腳本,傳入一個json配置文件。在bin目錄下已經給出了樣例配置,不一樣的數據源配置文件不同。
能夠經過命令查看配置模板以下:
# python datax.py -r {YOUR_READER} -w {YOUR_WRITER}
# python datax.py -r sqlservereader -w mysqlwriter
如下示例從SQL SERVER 2008 讀入,寫入mysql:
測試數據庫(sql server 2008數據庫服務器爲192.168.2.214)爲test01;表爲name
CREATE TABLE name( id tinyint NULL, name nchar(20) NULL );
###########插入記錄##############
INSERT INTO name VALUES (1,'test'),(2,'test0')
json配置文件以下:
{ "job": { "setting": { "speed": { //設置傳輸速度,單位爲byte/s,DataX運行會盡量達到該速度可是不超過它 "byte": 1048576, "channel":"5", } }, "content": [ { "reader": { "name": "sqlserverreader", "parameter": { // 數據庫鏈接用戶名 "username": "sa", // 數據庫鏈接密碼 "password": "123456", "column": ["*"], //"splitPk": "db_id",若是指定splitPk,表示用戶但願使用splitPk表明的字段進行數據分片 "connection": [ { "table": ["name"], "jdbcUrl": ["jdbc:sqlserver://192.168.2.214:1433;DatabaseName=test01"] } ] } }, "writer": { "name": "mysqlwriter", "parameter": { "writeMode": "insert", "username": "root", "password": "111111", "column":["*"], "connection": [ { "table": ["name"], "jdbcUrl": "jdbc:mysql://192.168.2.5:3306/test01?useUnicode=true&characterEncoding=utf8" } ] } } } ] } }
job.setting.speed(流量控制)
Job支持用戶對速度的自定義控制,channel的值能夠控制同步時的併發數,byte的值能夠控制同步時的速度
job.setting.errorLimit(髒數據控制)
Job支持用戶對於髒數據的自定義監控和告警,包括對髒數據最大記錄數閾值(record值)或者髒數據佔比閾值(percentage值),當Job傳輸過程出現的髒數據大於用戶指定的數量/百分比,DataX Job報錯退出。
*******************SqlServerReader 插件文檔****************************
1 快速介紹
SqlServerReader插件實現了從SqlServer讀取數據。在底層實現上,SqlServerReader經過JDBC鏈接遠程SqlServer數據庫,並執行相應的sql語句將數據從SqlServer庫中SELECT出來。
2 實現原理
簡而言之,SqlServerReader經過JDBC鏈接器鏈接到遠程的SqlServer數據庫,並根據用戶配置的信息生成查詢SELECT SQL語句併發送到遠程SqlServer數據庫,並將該SQL執行返回結果使用DataX自定義的數據類型拼裝爲抽象的數據集,並傳遞給下游Writer處理。
對於用戶配置Table、Column、Where的信息,SqlServerReader將其拼接爲SQL語句發送到SqlServer數據庫;對於用戶配置querySql信息,SqlServer直接將其發送到SqlServer數據庫。
3 參數說明
jdbcUrl
描述:描述的是到對端數據庫的JDBC鏈接信息,使用JSON的數組描述,並支持一個庫填寫多個鏈接地址。之因此使用JSON數組描述鏈接信息,是由於阿里集團內部支持多個IP探測,若是配置了多個,SqlServerReader能夠依次探測ip的可鏈接性,直到選擇一個合法的IP。若是所有鏈接失敗,SqlServerReader報錯。 注意,jdbcUrl必須包含在connection配置單元中。對於阿里集團外部使用狀況,JSON數組填寫一個JDBC鏈接便可。
jdbcUrl按照SqlServer官方規範,並能夠填寫鏈接附件控制信息。具體請參看SqlServer官方文檔。
必選:是
默認值:無
username
描述:數據源的用戶名
必選:是
默認值:無
password
描述:數據源指定用戶名的密碼
必選:是
默認值:無
table
描述:所選取的須要同步的表。使用JSON的數組描述,所以支持多張表同時抽取。當配置爲多張表時,用戶本身需保證多張表是同一schema結構,SqlServerReader不予檢查表是否同一邏輯表。注意,table必須包含在connection配置單元中。
必選:是
默認值:無
column
描述:所配置的表中須要同步的列名集合,使用JSON的數組描述字段信息。用戶使用*表明默認使用全部列配置,例如["*"]。
支持列裁剪,即列能夠挑選部分列進行導出。
支持列換序,即列能夠不按照表schema信息進行導出。
支持常量配置,用戶須要按照JSON格式: ["id", "[table]", "1", "'bazhen.csy'", "null", "COUNT(*)", "2.3" , "true"] id爲普通列名,[table]爲包含保留在的列名,1爲×××數字常量,'bazhen.csy'爲字符串常量,null爲空指針,to_char(a + 1)爲表達式,2.3爲浮點數,true爲布爾值。
column必須用戶顯示指定同步的列集合,不容許爲空!
必選:是
默認值:無
splitPk
描述:SqlServerReader進行數據抽取時,若是指定splitPk,表示用戶但願使用splitPk表明的字段進行數據分片,DataX所以會啓動併發任務進行數據同步,這樣能夠大大提供數據同步的效能。
推薦splitPk用戶使用表主鍵,由於表主鍵一般狀況下比較均勻,所以切分出來的分片也不容易出現數據熱點。
目前splitPk僅支持×××型數據切分,不支持浮點、字符串、日期等其餘類型。若是用戶指定其餘非支持類型,SqlServerReader將報錯!
splitPk設置爲空,底層將視做用戶不容許對單表進行切分,所以使用單通道進行抽取。
必選:否
默認值:無
where
描述:篩選條件,SqlServerReader根據指定的column、table、where條件拼接SQL,並根據這個SQL進行數據抽取。例如在作測試時,能夠將where條件指定爲limit 10;在實際業務場景中,每每會選擇當天的數據進行同步,能夠將where條件指定爲gmt_create > $bizdate 。
where條件能夠有效地進行業務增量同步。若是該值爲空,表明同步全表全部的信息。
必選:否
默認值:無
querySql
描述:在有些業務場景下,where這一配置項不足以描述所篩選的條件,用戶能夠經過該配置型來自定義篩選SQL。當用戶配置了這一項以後,DataX系統就會忽略table,column這些配置型,直接使用這個配置項的內容對數據進行篩選,例如須要進行多表join後同步數據,使用select a,b from table_a join table_b on table_a.id = table_b.id
當用戶配置querySql時,SqlServerReader直接忽略table、column、where條件的配置。
必選:否
默認值:無
fetchSize
描述:該配置項定義了插件和數據庫服務器端每次批量數據獲取條數,該值決定了DataX和服務器端的網絡交互次數,可以較大的提高數據抽取性能。
注意,該值過大(>2048)可能形成DataX進程OOM。。
必選:否
默認值:1024
3.3 類型轉換
目前SqlServerReader支持大部分SqlServer類型,但也存在部分個別類型沒有支持的狀況,請注意檢查你的類型。
下面列出SqlServerReader針對SqlServer類型轉換列表:
DataX內部類型SqlServer數據類型
Long bigint, int, smallint, tinyint
Double float, decimal, real, numeric
String char,nchar,ntext,nvarchar,text,varchar,nvarchar(MAX),varchar(MAX)
Date date, datetime, time
Boolean bit
Bytes binary,varbinary,varbinary(MAX),timestamp
請注意:
除上述羅列字段類型外,其餘類型均不支持。
timestamp類型做爲二進制類型。
4 約束限制
4.1 主備同步數據恢復問題
主備同步問題指SqlServer使用主從災備,備庫從主庫不間斷經過binlog恢復數據。因爲主備數據同步存在必定的時間差,特別在於某些特定狀況,例如網絡延遲等問題,致使備庫同步恢復的數據與主庫有較大差異,致使從備庫同步的數據不是一份當前時間的完整鏡像。
針對這個問題,咱們提供了preSql功能,該功能待補充。
4.2 一致性約束
SqlServer在數據存儲劃分中屬於RDBMS系統,對外能夠提供強一致性數據查詢接口。例如當一次同步任務啓動運行過程當中,當該庫存在其餘數據寫入方寫入數據時,SqlServerReader徹底不會獲取到寫入更新數據,這是因爲數據庫自己的快照特性決定的。關於數據庫快照特性,請參看MVCC Wikipedia
上述是在SqlServerReader單線程模型下數據同步一致性的特性,因爲SqlServerReader能夠根據用戶配置信息使用了併發數據抽取,所以不能嚴格保證數據一致性:當SqlServerReader根據splitPk進行數據切分後,會前後啓動多個併發任務完成數據同步。因爲多個併發任務相互之間不屬於同一個讀事務,同時多個併發任務存在時間間隔。所以這份數據並非完整的、一致的數據快照信息。
針對多線程的一致性快照需求,在技術上目前沒法實現,只能從工程角度解決,工程化的方式存在取捨,咱們提供幾個解決思路給用戶,用戶能夠自行選擇:
使用單線程同步,即再也不進行數據切片。缺點是速度比較慢,可是可以很好保證一致性。
關閉其餘數據寫入方,保證當前數據爲靜態數據,例如,鎖表、關閉備庫同步等等。缺點是可能影響在線業務。
4.3 數據庫編碼問題
SqlServerReader底層使用JDBC進行數據抽取,JDBC自然適配各種編碼,並在底層進行了編碼轉換。所以SqlServerReader不需用戶指定編碼,能夠自動識別編碼並轉碼。
4.4 增量數據同步
SqlServerReader使用JDBC SELECT語句完成數據抽取工做,所以可使用SELECT...WHERE...進行增量數據抽取,方式有多種:
數據庫在線應用寫入數據庫時,填充modify字段爲更改時間戳,包括新增、更新、刪除(邏輯刪)。對於這類應用,SqlServerReader只須要WHERE條件跟上一同步階段時間戳便可。
對於新增流水型數據,SqlServerReader能夠WHERE條件後跟上一階段最大自增ID便可。
對於業務上無字段區分新增、修改數據狀況,SqlServerReader也沒法進行增量數據同步,只能同步全量數據。
4.5 Sql安全性
SqlServerReader提供querySql語句交給用戶本身實現SELECT抽取語句,SqlServerReader自己對querySql不作任何安全性校驗。這塊交由DataX用戶方本身保證。
*****************************DataX MysqlWriter 插件文檔********************************
1 快速介紹
MysqlWriter 插件實現了寫入數據到 Mysql 主庫的目的表的功能。在底層實現上, MysqlWriter 經過 JDBC 鏈接遠程 Mysql 數據庫,並執行相應的 insert into ... 或者 ( replace into ...) 的 sql 語句將數據寫入 Mysql,內部會分批次提交入庫,須要數據庫自己採用 innodb 引擎。
MysqlWriter 面向ETL開發工程師,他們使用 MysqlWriter 從數倉導入數據到 Mysql。同時 MysqlWriter 亦能夠做爲數據遷移工具爲DBA等用戶提供服務。
2 實現原理
MysqlWriter 經過 DataX 框架獲取 Reader 生成的協議數據,根據你配置的 writeMode 生成
insert into...(當主鍵/惟一性索引衝突時會寫不進去衝突的行)
或者
replace into...(沒有遇到主鍵/惟一性索引衝突時,與 insert into 行爲一致,衝突時會用新行替換原有行全部字段) 的語句寫入數據到 Mysql。出於性能考慮,採用了 PreparedStatement + Batch,而且設置了:rewriteBatchedStatements=true,將數據緩衝到線程上下文 Buffer 中,當 Buffer 累計到預約閾值時,才發起寫入請求。
注意:目的表所在數據庫必須是主庫才能寫入數據;整個任務至少須要具有 insert/replace into...的權限,是否須要其餘權限,取決於你任務配置中在 preSql 和 postSql 中指定的語句。
3 參數說明
jdbcUrl
描述:目的數據庫的 JDBC 鏈接信息。做業運行時,DataX 會在你提供的 jdbcUrl 後面追加以下屬性:yearIsDateType=false&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true
注意:一、在一個數據庫上只能配置一個 jdbcUrl 值。這與 MysqlReader 支持多個備庫探測不一樣,由於此處不支持同一個數據庫存在多個主庫的狀況(雙主導入數據狀況)
二、jdbcUrl按照Mysql官方規範,並能夠填寫鏈接附加控制信息,好比想指定鏈接編碼爲 gbk ,則在 jdbcUrl 後面追加屬性 useUnicode=true&characterEncoding=gbk。具體請參看 Mysql官方文檔或者諮詢對應 DBA。
必選:是
默認值:無
username
描述:目的數據庫的用戶名
必選:是
默認值:無
password
描述:目的數據庫的密碼
必選:是
默認值:無
table
描述:目的表的表名稱。支持寫入一個或者多個表。當配置爲多張表時,必須確保全部表結構保持一致。
注意:table 和 jdbcUrl 必須包含在 connection 配置單元中
必選:是
默認值:無
column
描述:目的表須要寫入數據的字段,字段之間用英文逗號分隔。例如: "column": ["id","name","age"]。若是要依次寫入所有列,使用表示, 例如: "column": [""]。
**column配置項必須指定,不能留空!**
注意:一、咱們強烈不推薦你這樣配置,由於當你目的表字段個數、類型等有改動時,你的任務可能運行不正確或者失敗
二、 column 不能配置任何常量值
必選:是
默認值:否
session
描述: DataX在獲取Mysql鏈接時,執行session指定的SQL語句,修改當前connection session屬性
必須: 否
默認值: 空
preSql
描述:寫入數據到目的表前,會先執行這裏的標準語句。若是 Sql 中有你須要操做到的表名稱,請使用 @table 表示,這樣在實際執行 Sql 語句時,會對變量按照實際表名稱進行替換。好比你的任務是要寫入到目的端的100個同構分表(表名稱爲:datax_00,datax01, ... datax_98,datax_99),而且你但願導入數據前,先對錶中數據進行刪除操做,那麼你能夠這樣配置:"preSql":["delete from 表名"],效果是:在執行到每一個表寫入數據前,會先執行對應的 delete from 對應表名稱
必選:否
默認值:無
postSql
描述:寫入數據到目的表後,會執行這裏的標準語句。(原理同 preSql )
必選:否
默認值:無
writeMode
描述:控制寫入數據到目標表採用 insert into 或者 replace into 或者 ON DUPLICATE KEY UPDATE 語句
必選:是
全部選項:insert/replace/update
默認值:insert
batchSize
描述:一次性批量提交的記錄數大小,該值能夠極大減小DataX與Mysql的網絡交互次數,並提高總體吞吐量。可是該值設置過大可能會形成DataX運行進程OOM狀況。
必選:否
默認值:1024
3.3 類型轉換
相似 MysqlReader ,目前 MysqlWriter 支持大部分 Mysql 類型,但也存在部分個別類型沒有支持的狀況,請注意檢查你的類型。
下面列出 MysqlWriter 針對 Mysql 類型轉換列表:
DataX內部類型 Mysql數據類型
Long int, tinyint, smallint, mediumint, int, bigint, year
Double float, double, decimal
String varchar, char, tinytext, text, mediumtext, longtext
Date date, datetime, timestamp, time
Boolean bit, bool
Bytes tinyblob, mediumblob, blob, longblob, varbinary
bit類型目前是未定義類型轉換
更詳細的配置參考官方wiki:
https://github.com/alibaba/DataX/wiki/DataX-all-data-channels
Transformer的使用見下:
https://github.com/alibaba/DataX/blob/master/transformer/doc/transformer.md
把上面的json配置文件保存至/usr/local/datax/job/目錄下並命名爲sqltomysql.json
進入/usr/local/datax/bin目錄,執行
# python datax.py /usr/local/datax/job/sqltomysql.json DataX (DATAX-OPENSOURCE-3.0), From Alibaba ! Copyright (C) 2010-2016, Alibaba Group. All Rights Reserved. 2017-03-03 17:22:24.477 [main] INFO VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl 2017-03-03 17:22:24.499 [main] INFO Engine - the machine info => osInfo:Oracle Corporation 1.8 25.121-b13 jvmInfo:Linux amd64 3.10.0-327.el7.x86_64 cpu num:2 totalPhysicalMemory:-0.00G freePhysicalMemory:-0.00G maxFileDescriptorCount:-1 currentOpenFileDescriptorCount:-1 GC Names[Copy, MarkSweepCompact] MEMORY_NAME | allocation_size | init_size Eden Space | 273.06MB | 273.06MB Code Cache | 240.00MB | 2.44MB Survivor Space | 34.13MB | 34.13MB Compressed Class Space | 1,024.00MB | 0.00MB Metaspace | -0.00MB | 0.00MB Tenured Gen | 682.69MB | 682.69MB 2017-03-03 17:22:24.535 [main] INFO Engine - { "content":[ { "reader":{ "name":"sqlserverreader", "parameter":{ "column":[ "*" ], "connection":[ { "jdbcUrl":[ "jdbc:sqlserver://192.168.2.214:1433;DatabaseName=test01" ], "table":[ "name" ] } ], "password":"******", "username":"sa" } }, "writer":{ "name":"mysqlwriter", "parameter":{ "column":[ "*" ], "connection":[ { "jdbcUrl":"jdbc:mysql://192.168.2.5:3306/test01?useUnicode=true&characterEncoding=utf8", "table":[ "name" ] } ], "password":"******", "username":"root", "writeMode":"insert" } } } ], "setting":{ "speed":{ "byte":1048576, "channel":"5" } } } 2017-03-03 17:22:24.562 [main] WARN Engine - prioriy set to 0, because NumberFormatException, the value is: null 2017-03-03 17:22:24.565 [main] INFO PerfTrace - PerfTrace traceId=job_-1, isEnable=false, priority=0 2017-03-03 17:22:24.565 [main] INFO JobContainer - DataX jobContainer starts job. 2017-03-03 17:22:24.568 [main] INFO JobContainer - Set jobId = 0 2017-03-03 17:22:25.212 [job-0] INFO OriginalConfPretreatmentUtil - Available jdbcUrl:jdbc:sqlserver://192.168.2.214:1433;DatabaseName=test01. 2017-03-03 17:22:25.213 [job-0] WARN OriginalConfPretreatmentUtil - 您的配置文件中的列配置存在必定的風險. 由於您未配置讀取數據庫表的列,當您的表字段個數、類型有變更時,可能影響任務正確性甚至會運行出錯。請檢查您的配置並做出修改. 2017-03-03 17:22:25.742 [job-0] INFO OriginalConfPretreatmentUtil - table:[name] all columns:[ id,name ]. 2017-03-03 17:22:25.743 [job-0] WARN OriginalConfPretreatmentUtil - 您的配置文件中的列配置信息存在風險. 由於您配置的寫入數據庫表的列爲*,當您的表字段個數、類型有變更時,可能影響任務正確性甚至會運行出錯。請檢查您的配置並做出修改. 2017-03-03 17:22:25.746 [job-0] INFO OriginalConfPretreatmentUtil - Write data [ insert INTO %s (id,name) VALUES(?,?) ], which jdbcUrl like:[jdbc:mysql://192.168.2.5:3306/test01?useUnicode=true&characterEncoding=utf8&yearIsDateType=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&rewriteBatchedStatements=true] 2017-03-03 17:22:25.747 [job-0] INFO JobContainer - jobContainer starts to do prepare ... 2017-03-03 17:22:25.747 [job-0] INFO JobContainer - DataX Reader.Job [sqlserverreader] do prepare work . 2017-03-03 17:22:25.748 [job-0] INFO JobContainer - DataX Writer.Job [mysqlwriter] do prepare work . 2017-03-03 17:22:25.749 [job-0] INFO JobContainer - jobContainer starts to do split ... 2017-03-03 17:22:25.750 [job-0] INFO JobContainer - Job set Max-Byte-Speed to 1048576 bytes. 2017-03-03 17:22:25.755 [job-0] INFO JobContainer - DataX Reader.Job [sqlserverreader] splits to [1] tasks. 2017-03-03 17:22:25.757 [job-0] INFO JobContainer - DataX Writer.Job [mysqlwriter] splits to [1] tasks. 2017-03-03 17:22:25.779 [job-0] INFO JobContainer - jobContainer starts to do schedule ... 2017-03-03 17:22:25.785 [job-0] INFO JobContainer - Scheduler starts [1] taskGroups. 2017-03-03 17:22:25.788 [job-0] INFO JobContainer - Running by standalone Mode. 2017-03-03 17:22:25.797 [taskGroup-0] INFO TaskGroupContainer - taskGroupId=[0] start [1] channels for [1] tasks. 2017-03-03 17:22:25.803 [taskGroup-0] INFO Channel - Channel set byte_speed_limit to -1, No bps activated. 2017-03-03 17:22:25.804 [taskGroup-0] INFO Channel - Channel set record_speed_limit to -1, No tps activated. 2017-03-03 17:22:25.825 [taskGroup-0] INFO TaskGroupContainer - taskGroup[0] taskId[0] attemptCount[1] is started 2017-03-03 17:22:25.831 [0-0-0-reader] INFO CommonRdbmsReader$Task - Begin to read record by Sql: [select * from name ] jdbcUrl:[jdbc:sqlserver://192.168.2.214:1433;DatabaseName=test01]. 2017-03-03 17:22:26.027 [0-0-0-reader] INFO CommonRdbmsReader$Task - Finished read record by Sql: [select * from name ] jdbcUrl:[jdbc:sqlserver://192.168.2.214:1433;DatabaseName=test01]. 2017-03-03 17:22:26.128 [taskGroup-0] INFO TaskGroupContainer - taskGroup[0] taskId[0] is successed, used[311]ms 2017-03-03 17:22:26.130 [taskGroup-0] INFO TaskGroupContainer - taskGroup[0] completed it's tasks. 2017-03-03 17:22:35.815 [job-0] INFO StandAloneJobContainerCommunicator - Total 2 records, 42 bytes | Speed 4B/s, 0 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 0.000s | All Task WaitReaderTime 0.000s | Percentage 100.00% 2017-03-03 17:22:35.816 [job-0] INFO AbstractScheduler - Scheduler accomplished all tasks. 2017-03-03 17:22:35.817 [job-0] INFO JobContainer - DataX Writer.Job [mysqlwriter] do post work. 2017-03-03 17:22:35.818 [job-0] INFO JobContainer - DataX Reader.Job [sqlserverreader] do post work. 2017-03-03 17:22:35.819 [job-0] INFO JobContainer - DataX jobId [0] completed successfully. 2017-03-03 17:22:35.821 [job-0] INFO HookInvoker - No hook invoked, because base dir not exists or is a file: /usr/local/datax/hook 2017-03-03 17:22:35.825 [job-0] INFO JobContainer - [total cpu info] => averageCpu | maxDeltaCpu | minDeltaCpu -1.00% | -1.00% | -1.00% [total gc info] => NAME | totalGCCount | maxDeltaGCCount | minDeltaGCCount | totalGCTime | maxDeltaGCTime | minDeltaGCTime Copy | 0 | 0 | 0 | 0.000s | 0.000s | 0.000s MarkSweepCompact | 0 | 0 | 0 | 0.000s | 0.000s | 0.000s 2017-03-03 17:22:35.825 [job-0] INFO JobContainer - PerfTrace not enable! 2017-03-03 17:22:35.826 [job-0] INFO StandAloneJobContainerCommunicator - Total 2 records, 42 bytes | Speed 4B/s, 0 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 0.000s | All Task WaitReaderTime 0.000s | Percentage 100.00% 2017-03-03 17:22:35.828 [job-0] INFO JobContainer - 任務啓動時刻 : 2017-03-03 17:22:24 任務結束時刻 : 2017-03-03 17:22:35 任務總計耗時 : 11s 任務平均流量 : 4B/s 記錄寫入速度 : 0rec/s 讀出記錄總數 : 2 讀寫失敗總數 : 0
檢查驗證mysql數據庫,查詢test01數據庫name表
mysql> SELECT id,name FROM table name; +------+-------+ | id | name | +------+-------+ | 1 | test | | 2 | test0 | +------+-------+ 2 rows in set (0.00 sec)
更多實際應用結合DataX Transformer在數據同步、傳輸過程當中,存在用戶對於數據傳輸進行特殊定製化的需求場景,包括裁剪列、轉換列等工做,能夠藉助ETL的T過程實現(Transformer)。DataX包含了完成的E(Extract)、T(Transformer)、L(Load)支持。