【轉】阿里出品的ETL工具dataX初體驗

原文連接:https://www.imooc.com/article/15640python

來源:慕課網mysql

 

個人畢設選擇了大數據方向的題目。大數據的第一步就是要拿到足夠的數據源。現實狀況中咱們須要的數據源分佈在不一樣的業務系統中,而這些系統每每是異構的,並且咱們的分析過程不能影響原有業務系統的運行。爲了把不一樣的數據歸集起來,我開始瞭解和接觸ETL。本篇介紹阿里的開源ETL工具dataX。
<!-- more -->
ETL&&經常使用工具linux

 ETL,是英文 Extract-Transform-Load 的縮寫,用來描述將數據歷來源端通過抽取(extract)、轉換(transform)、加載(load)至目的端的過程。git

個人理解就是從業務系統中根據所要分析的主題,創建數據倉庫的過程。大數據的應用已經很是普遍,ETL過程如今已經發展成爲一個比較專門的職業,相關聯的包括ETL工程師,BI分析師等等。

數據的遷移和集成都須要ETL來實現,通常來講在數據倉庫的開發過程當中ETL會佔到70%到80%的時間,我瞭解到的ETL工具包括:

github

  1.     Kettle是一個開源的ETL工具,優勢是免費,資料挺多。功能挺全面的,我折騰過一段時間,感受不是很符合須要,想要在web上使用確實會有點困難,也多是瞭解不深。
  2.     DataStage,這是IBM爲其配套的DB2開發的ETL工具,也能夠用於其它數據庫數據的集成,這個工具不錯,銀行用的挺多的。
  3.     Informatica,這是美國的一個數據集成公司的開發的數據集成工具,有圖形界面。
  4.     sqoop,這個是hadoop生態裏的一個數據導入工具,可是它依賴於hadoop環境,也有點不符合我如今階段的須要。


固然還有其餘挺多,畢竟對於數據的處理需求從信息機書誕生開始就一直存在。上面提到的這些工具比較強大,功能全面,但可能目前知識技能有限,駕馭起來不是很方便,折騰過一段時間後放棄了。咱們經常使用的一些數據庫工具也會帶有導入導出功能,經過文本文件,csv文件等都能完成一個數據中專過程,但相對比較麻煩,並且功能太少對數據處理不是很方便。

直到我去雲棲大會據說了DataX ,這個簡潔,高效,開箱即用的ETL工具,測試事後效率也不錯,調試信息也很豐富,才發現這就是我須要的。官方介紹以下:web

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

dataX自己只是一個數據庫同步框架,經過插件體系完成數據同步過程reader插件用於讀入,writer插件用於寫出,中間的framework能夠定義transform插件完成數據轉化的須要。
使用它以後,咱們的數據同步工做就簡化成了:根據數據源選擇對應的reader或者writer插件,填寫必要的一個配置文件,一句命令搞定所有。數據庫

 

dataX安裝配置

    1.系統環境windows 、linux都可,其餘必須的依賴包括:
        JDK(1.8)
        Python(推薦Python2.6.X)
        Apache Maven 3.x (想經過源碼編譯的話須要,不然直接用二進制包便可)
    2.安裝
        下載安裝tar包(https://github.com/alibaba/DataX)
        解壓至本地某個目錄,修改權限爲755,進入bin目錄,便可運行樣例同步做業。       json

$ tar zxvf datax.tar.gz $ sudo chmod -R 755 {YOUR_DATAX_HOME} $ cd {YOUR_DATAX_HOME}/bin $ python datax.py ../job/job.json

 

        若是一切順利就會看到樣例輸出,說明工具已經就緒可使用了。windows

 

配置文件介紹

他的所有使用就如同安裝配置部分所說,僅僅是執行一個python腳本,傳入一個json配置文件。咱們的關鍵工做就是定義這個json配置。在bin目錄下也已經給出了樣例配置,不過針對不一樣的數據源仍是會有些許區別。
咱們可使用以下命令查看咱們具體須要的配置文件樣例:

  python datax.py -r {YOUR_READER} -w {YOUR_WRITER} 

好比我如今須要的是從sqlserver讀入,寫到mysql,那麼就能夠嘗試:
python datax.py -r sqlservereader -w mysqlwriter
輸出以下:

{ "job": { "content": [ { "reader": { "name": "sqlserverreader", "parameter": { "connection": [ { /***省略多條****/ } ], "column": ["*"], /***省略多條****/ } }, "writer": { "name": "mysqlwriter", "parameter": { "column": ['*'], "connection": [ { /***省略多條****/ } ], "password": " /***省略多條****/", "username": "root", "writeMode": "insert" } } } ], "setting": { "speed": { "channel": "5" } } } }

 

 

  •     大體也是很是容易理解的,配置數據庫帳號密碼,配置同步的表名列名等等信息。
  •     jdbcUrl,username,password,table,column,writeMode(insert/replace/update)等爲必選項,見名知意。
  •     按照json格式填寫便可,reader支持配置多個鏈接,只要有一個連通便可,writer只能配置一個鏈接。
  •     更詳細的配置參考官方wiki:    https://github.com/alibaba/DataX/wiki/DataX-all-data-channels
  •     Transformer的使用見下:    https://github.com/alibaba/DataX/blob/master/transformer/doc/transformer.md

windows下亂碼修復

    我把這個工具遷移到一臺windows主機上使用時候看到控制檯友好的中文提示竟然都變成了亂碼了(話說有中文提示也是我選擇他很重要的理由啊)。還好官方也給出瞭解決方案:
        1.打開CMD.exe命令行窗口
        經過 chcp命令改變代碼頁,UTF-8的代碼頁爲65001
        ​ chcp 65001
        2.執行該操做後,代碼頁就被變成UTF-8了。可是,在窗口中仍舊不能正確顯示UTF-8字符。
        3.修改窗口屬性,改變字體
        ​ 在命令行標題欄上點擊右鍵,選擇"屬性"->"字體",將字體修改成True Type字體"Lucida Console",而後點擊肯定將屬性應用到當前窗口。

性能測試

單核8G的虛擬機,這個速度還算能夠吧,多是數據讀寫不在同一臺機子上網絡傳輸也消耗了很多時間。

相關文章
相關標籤/搜索