簡介
DataX 是阿里云?DataWorks數據集成?的開源版本,在阿里巴巴集團內被廣泛使用的離線數據同步工具/平臺。DataX 實現了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databend 等各種異構數據源之間高效的數據同步功能。
個人發現特點:數據量超過千萬的遷移速度回加快(50000/s),低于千萬的速度只有4000/s左右,目前還沒發現原因
?
特點
DataX本身作為數據同步框架,將不同數據源的同步抽象為從源頭數據源讀取數據的Reader插件,以及向目標端寫入數據的Writer插件,理論上DataX框架可以支持任意數據源類型的數據同步工作。同時DataX插件體系作為一套生態系統, 每接入一套新數據源該新加入的數據源即可實現和現有的數據源互通。
支持數據庫
類型 | 數據源 | Reader(讀) | Writer(寫) | 文檔 |
---|---|---|---|---|
RDBMS 關系型數據庫 | MySQL | √ | √ | 讀?、寫 |
Oracle | √ | √ | 讀?、寫 | |
OceanBase | √ | √ | 讀?、寫 | |
SQLServer | √ | √ | 讀?、寫 | |
PostgreSQL | √ | √ | 讀?、寫 | |
DRDS | √ | √ | 讀?、寫 | |
Kingbase | √ | √ | 讀?、寫 | |
通用RDBMS(支持所有關系型數據庫) | √ | √ | 讀?、寫 | |
阿里云數倉數據存儲 | ODPS | √ | √ | 讀?、寫 |
ADB | √ | 寫 | ||
ADS | √ | 寫 | ||
OSS | √ | √ | 讀?、寫 | |
OCS | √ | 寫 | ||
Hologres | √ | 寫 | ||
AnalyticDB For PostgreSQL | √ | 寫 | ||
阿里云中間件 | datahub | √ | √ | 讀 、寫 |
SLS | √ | √ | 讀 、寫 | |
圖數據庫 | 阿里云 GDB | √ | √ | 讀?、寫 |
Neo4j | √ | 寫 | ||
NoSQL數據存儲 | OTS | √ | √ | 讀?、寫 |
Hbase0.94 | √ | √ | 讀?、寫 | |
Hbase1.1 | √ | √ | 讀?、寫 | |
Phoenix4.x | √ | √ | 讀?、寫 | |
Phoenix5.x | √ | √ | 讀?、寫 | |
MongoDB | √ | √ | 讀?、寫 | |
Cassandra | √ | √ | 讀?、寫 | |
數倉數據存儲 | StarRocks | √ | √ | 讀 、寫 |
ApacheDoris | √ | 寫 | ||
ClickHouse | √ | √ | 讀?、寫 | |
Databend | √ | 寫 | ||
Hive | √ | √ | 讀?、寫 | |
kudu | √ | 寫 | ||
selectdb | √ | 寫 | ||
無結構化數據存儲 | TxtFile | √ | √ | 讀?、寫 |
FTP | √ | √ | 讀?、寫 | |
HDFS | √ | √ | 讀?、寫 | |
Elasticsearch | √ | 寫 | ||
時間序列數據庫 | OpenTSDB | √ | 讀 | |
TSDB | √ | √ | 讀?、寫 | |
TDengine | √ | √ | 讀?、寫 |
前提條件
- JDK(1.8以上,推薦1.8)
- Python(2或3都可以)
- Apache Maven 3.x?(Compile DataX)
原生安裝及使用
安裝
安裝包下載地址
下載后解壓至本地某個目錄,進入bin目錄,即可運行同步作業:
$ cd {YOUR_DATAX_HOME}/bin
$ python datax.py {YOUR_JOB.json}
?使用
配置示例:從stream讀取數據并打印到控制臺
-
第一步、創建作業的配置文件(json格式)
可以通過命令查看配置模板: python datax.py -r {YOUR_READER} -w {YOUR_WRITER}
$ cd {YOUR_DATAX_HOME}/bin $ python datax.py -r streamreader -w streamwriter DataX (UNKNOWN_DATAX_VERSION), From Alibaba ! Copyright (C) 2010-2015, Alibaba Group. All Rights Reserved. Please refer to the streamreader document:https://github.com/alibaba/DataX/blob/master/streamreader/doc/streamreader.md Please refer to the streamwriter document:https://github.com/alibaba/DataX/blob/master/streamwriter/doc/streamwriter.md Please save the following configuration as a json file and usepython {DATAX_HOME}/bin/datax.py {JSON_FILE_NAME}.json to run the job.{"job": {"content": [{"reader": {"name": "streamreader", "parameter": {"column": [], "sliceRecordCount": ""}}, "writer": {"name": "streamwriter", "parameter": {"encoding": "", "print": true}}}], "setting": {"speed": {"channel": ""}}} }
根據模板配置json如下:
#stream2stream.json {"job": {"content": [{"reader": {"name": "streamreader","parameter": {"sliceRecordCount": 10,"column": [{"type": "long","value": "10"},{"type": "string","value": "hello,你好,世界-DataX"}]}},"writer": {"name": "streamwriter","parameter": {"encoding": "UTF-8","print": true}}}],"setting": {"speed": {"channel": 5}}} }
-
第二步:啟動DataX
$ cd {YOUR_DATAX_DIR_BIN} $ python datax.py ./stream2stream.json
同步結束,顯示日志如下:
... 2015-12-17 11:20:25.263 [job-0] INFO JobContainer - 任務啟動時刻 : 2015-12-17 11:20:15 任務結束時刻 : 2015-12-17 11:20:25 任務總計耗時 : 10s 任務平均流量 : 205B/s 記錄寫入速度 : 5rec/s 讀出記錄總數 : 50 讀寫失敗總數 : 0
data-web本地部署
前提是安裝了datax
下載源碼? ?https://github.com/WeiYe-Jing/datax-web.git
目錄結構如下
修改admin配置文件
修改datax_admin下resources/application.yml文件
#數據源datasource:username: rootpassword: rooturl: jdbc:mysql://localhost:3306/datax_web?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.jdbc.Driver
?修改數據源配置,目前僅支持mysql
# 配置mybatis-plus打印sql日志
logging:level:com.wugui.datax.admin.mapper: errorpath: ./data/applogs/admin
修改日志路徑path
# datax-web emailmail:host: smtp.qq.comport: 25username: xxx@qq.compassword: xxxproperties:mail:smtp:auth: truestarttls:enable: truerequired: truesocketFactory:class: javax.net.ssl.SSLSocketFactory
修改郵件發送配置(不需要可以不修改)
修改excutor配置文件
修改datax_executor下resources/application.yml文件?
# log config
logging:config: classpath:logback.xmlpath: ./data/applogs/executor/jobhandler
?修改日志路徑path
datax:job:admin:### datax-web admin addressaddresses: http://127.0.0.1:8080executor:appname: datax-executorip:port: 9999### job log pathlogpath: ./data/applogs/executor/jobhandler### job log retention dayslogretentiondays: 30executor:jsonpath: /Users/mac/data/applogspypath: /Users/mac/tools/datax/bin/datax.py
修改datax.job配置
- admin.addresses datax_admin部署地址,如調度中心集群部署存在多個地址則用逗號分隔,執行器將會使用該地址進行"執行器心跳注冊"和"任務結果回調";
- executor.appname 執行器AppName,每個執行器機器集群的唯一標示,執行器心跳注冊分組依據;
- executor.ip 默認為空表示自動獲取IP,多網卡時可手動設置指定IP,該IP不會綁定Host僅作為通訊實用;地址信息用于 "執行器注冊" 和 "調度中心請求并觸發任務";
- executor.port 執行器Server端口號,默認端口為9999,單機部署多個執行器時,注意要配置不同執行器端口;
- executor.logpath 執行器運行日志文件存儲磁盤路徑,需要對該路徑擁有讀寫權限;
- executor.logretentiondays 執行器日志文件保存天數,過期日志自動清理, 限制值大于等于3時生效; 否則, 如-1, 關閉自動清理功能;
- executor.jsonpath datax json臨時文件保存路徑
- pypath DataX啟動腳本地址,例如:xxx/datax/bin/datax.py 如果系統配置DataX環境變量(DATAX_HOME),logpath、jsonpath、pypath可不配,log文件和臨時json存放在環境變量路徑下。
啟動項目
本地idea開發環境
- 1.運行datax_admin下 DataXAdminApplication
- 2.運行datax_executor下 DataXExecutorApplication
admin啟動成功后日志會輸出三個地址,兩個接口文檔地址,一個前端頁面地址
啟動成功
啟動成功后打開頁面(默認管理員用戶名:admin 密碼:123456)?http://localhost:8080/index.html#/dashboard?
data-web的docker安裝
前提條件安裝好mysql
docker run -d --name datax-admin -p 2020:2020 -v /newdisk/datax/log/datax-admin.log:/tmp/datax-admin.log hametan/datax-web:2.1.2 java -jar datax-admin-2.1.2.jar --PORT=2020 --MYSQL_SERVICE_HOST=192.168.31.131 --MYSQL_SERVICE_PORT=3306 --MYSQL_USER=root --MYSQL_PASSWORD=123456 --DB_DATABASE=dataxdocker run -d --name datax-executor -p 2021:2021 -v /newdisk/datax/log/:/home/applogs/executor/jobhandler/ hametan/datax-web:2.1.2 java -jar datax-executor-2.1.2.jar --PORT=2021 --ADDRESSES=http://192.168.31.131:2020