原文連接: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
- Kettle是一個開源的ETL工具,優勢是免費,資料挺多。功能挺全面的,我折騰過一段時間,感受不是很符合須要,想要在web上使用確實會有點困難,也多是瞭解不深。
- DataStage,這是IBM爲其配套的DB2開發的ETL工具,也能夠用於其它數據庫數據的集成,這個工具不錯,銀行用的挺多的。
- Informatica,這是美國的一個數據集成公司的開發的數據集成工具,有圖形界面。
- 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的虛擬機,這個速度還算能夠吧,多是數據讀寫不在同一臺機子上網絡傳輸也消耗了很多時間。