dataX是阿里開源的離線數據庫同步工具的使用
DataX介紹:
DataX 是阿里開源的一個異構數據源離線同步工具,致力於實現包括關係型數據庫(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各種異構數據源之間穩定高效的數據同步功能。
一句話:dataX是阿里開源的離線數據庫同步工具。
DataX設計理念
DataX本身作爲數據同步框架,將不同數據源的同步抽象爲從源頭數據源讀取數據的Reader插件,以及向目標端寫入數據的Writer插件,理論上DataX框架可以支持任意數據源類型的數據同步工作。同時DatadX插件體系作爲一套生態系統, 每接入一套新數據源該新加入的數據源即可實現和現有的數據源互通。
支持的數據:
環境搭建
系統要求
系統:Linux/Windows
JDK:1.8+(推薦1.8)
Python:2.6.x(推薦Python2.6.x)
Maven:3.x
凱哥在Windos環境搭建的。資料如下圖:
如果本地沒有Python環境的話,下載python-2.7.6-amd64.msi。然後點擊安裝後。
查看python版本號:
如果沒有,配置下系統環境變量就可以了。
測試:
將下載的datax.tar.gz解壓後,進入到datax目錄下的bin中,裏面有datax.py文件。可以在cmd中測試:
python E:\datax\bin\datax.py E:\datax\job\job.json
說明:
Python:執行pytho的
E:\xx.py:datax的py腳本
E:\xx.json:同步配置的json文件
如果亂碼的話,現在CMD輸入:
CHCP 65001
使用示例:
1:從CVS文件中,將數據同步到mysql中
2:從mysql中將數據同步到mysql中
3:從Oracle中將數據同步到mysql中
一:從CVS文件中,將數據同步到mysql中:
1.1:配置json腳本
結構如下:
分爲reader和writer兩個。
reader如下圖:
說明:
Path:cvs文件的位置
Encoding:編碼
Column:行
skipHeader:是否跳過表頭
CVS文件中數據:
writer的配置如下圖:
說明:
name:是什麼寫。Oracle呢還是mysql呢
parameter:參數
writemode:寫的模式。Insert表示插入的
username:數據庫的用戶名
password:數據庫的密碼
column:表的字段
connection:數據庫連接
jdbcUrl:數據庫鏈接
table:表名
數據庫表:
1.2執行:
在datax的bin目錄執行:
python datax.py ../job/ csv_mysql.json
執行後數據:
具體的json配置信息:
{ "job": { "setting": { "speed": { "channel": 1 } }, "content": [ { "reader": { "name": "txtfilereader", "parameter": { "path": ["D:/ datax.csv"], "encoding": "gbk", "column": [
{ "index": 1, "type": "string" }, { "index": 2, "type": "string" } , { "index": 3, "type": "string" } ], "fieldDelimiter": ",", "skipHeader": "true" } },
"writer": { "name": "mysqlwriter", "parameter": { "writeMode": "insert", "username": "root", "password": "123456", "column": [
"t_name", "addr", "c" ], "session": [], "connection": [ { "jdbcUrl": "jdbc:mysql://127.0.0.1:3306/guns?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8", "table": ["datax_test"] } ] } } } ] } } |
二:從mysql中將數據同步到mysql中
1:配置信息如下
reader配置:
writer配置:
配置完成後,執行方法同1.2
三:從Oracle中將數據同步到mysql中
說明:
jdbcUrl配置:"jdbcUrl": ["jdbc:oracle:thin:@localhost:1521:coredb"],
querySql:有的時候,我們同步數據的時候,需要根據條件查詢同步的。所以可以在這個querysql中寫sql語句。
執行同1.2
執行結果: