ETL工具--DataX3.0實戰

ETL工具--DataX3.0實戰


DataX是一個在異構的數據庫/文件系統之間高速交換數據的工具,實現了在任意的數據處理系統(RDBMS/Hdfs/Local filesystem)之間的數據交換,由淘寶數據平臺部門完成。  

 DataX插件分爲Reader和Writer兩類。Reader負責從數據源端讀取數據到Storage(交換空間),Writer負責將Storage中的數據寫入到數據目的端。Storage可以適配不同種類的Reader和Writer,從而實現數據同步.  

 目前DataX版本已經提供的Reader插件如下:  

 1、 hdfsreader : 支持從hdfs文件系統獲取數據。  

 2、mysqlreader: 支持從mysql數據庫獲取數據。  

 3、 sqlserverreader: 支持從sqlserver數據庫獲取數據。 

 4、 oraclereader : 支持從oracle數據庫獲取數據。   

 5、 streamreader: 支持從stream流獲取數據(常用於測試)  

 6、httpreader : 支持從http URL獲取數據。     

 提供的Writer插件如下:   

 1、 hdfswriter :支持向hdbf寫入數據。  

 2、 mysqlwriter :支持向mysql寫入數據。  

 3、 sqlserverwriter:支持向sqlserver寫入數據。  

 4、 oraclewriter :支持向oracle寫入數據。  

 5、 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

  注意:1、在一個數據庫上只能配置一個 jdbcUrl 值。這與 MysqlReader 支持多個備庫探測不同,因爲此處不支持同一個數據庫存在多個主庫的情況(雙主導入數據情況)

       2、jdbcUrl按照Mysql官方規範,並可以填寫連接附加控制信息,比如想指定連接編碼爲 gbk ,則在 jdbcUrl 後面追加屬性 useUnicode=true&characterEncoding=gbk。具體請參看 Mysql官方文檔或者諮詢對應 DBA。

必選:是 

默認值:無 


username

描述:目的數據庫的用戶名 

必選:是 

默認值:無 


password

描述:目的數據庫的密碼 

必選:是 

默認值:無 


table

描述:目的表的表名稱。支持寫入一個或者多個表。當配置爲多張表時,必須確保所有表結構保持一致。

  注意:table 和 jdbcUrl 必須包含在 connection 配置單元中

必選:是 

默認值:無 


column

描述:目的表需要寫入數據的字段,字段之間用英文逗號分隔。例如: "column": ["id","name","age"]。如果要依次寫入全部列,使用表示, 例如: "column": [""]。

**column配置項必須指定,不能留空!**

  注意:1、我們強烈不推薦你這樣配置,因爲當你目的表字段個數、類型等有改動時,你的任務可能運行不正確或者失敗

       2、 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)支持。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章