一垫释、DataX安裝
官網(wǎng)描述很詳細(xì)软舌,很簡單---->DataX安裝
二锰茉、使用示例:從Oracle數(shù)據(jù)庫導(dǎo)數(shù)據(jù)到Mysql數(shù)據(jù)庫
事先準(zhǔn)備:
Oracle數(shù)據(jù)庫的ORDER_INFO表设联,MySQL數(shù)據(jù)庫的order_info表缕碎,表結(jié)構(gòu)相同
2.1使用Python啟動
- 生成模板文件
打開安裝目錄的bin褥影,使用命令python datax.py -r {YOUR_READER} -w {YOUR_WRITER}
生成模板文件,由于我是要從Oracle讀數(shù)據(jù)到MySQL咏雌,所以我的生成模板命令如下:(DataX支持的reader和writer )
$ cd {YOUR_DATAX_DIR_BIN}
$ python datax.py -r oraclereader -w mysqlwriter
- 根據(jù)生成的模板文件凡怎,填充自己的json文件
我按照實(shí)際情況填充后如下:
{
"job": {
"content": [
{
"reader": {
"name": "oraclereader",
"parameter": {
"column": ["*"],
"connection": [
{
"jdbcUrl": ["jdbc:oracle:thin:@192.168.123.34:1521:ocm"],
"table": ["ORDER_INFO"]
}
],
"password": "admin",
"username": "***"
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"column": ["*"],
"connection": [
{
"jdbcUrl": "jdbc:mysql://192.168.211.56:3306/test_datax?characterEncoding=utf8",
"table": ["order_info"]
}
],
"password": "datax01",
"preSql": [],
"session": [],
"username": "datax01",
"writeMode": "insert"
}
}
}
],
"setting": {
"speed": {
"channel": "5"
}
}
}
}
保存為oracle2mysql.json文件于{YOUR_DATAX_DIR_BIN}目錄
- 啟動DataX,開始傳輸
$ cd {YOUR_DATAX_DIR_BIN}
$ python datax.py ./oracle2mysql.json
同步結(jié)束赊抖,顯示如下日志:
2018-09-18 14:31:15.200 [job-0] INFO JobContainer -
任務(wù)啟動時刻 : 2018-09-18 14:31:02
任務(wù)結(jié)束時刻 : 2018-09-18 14:31:15
任務(wù)總計(jì)耗時 : 12s
任務(wù)平均流量 : 228.64KB/s
記錄寫入速度 : 495rec/s
讀出記錄總數(shù) : 4953
讀寫失敗總數(shù) : 0
2.2使用Java啟動
從github上將DataX的源碼clone到本地统倒,DataX的入口類是core包下面的alibaba.datax.core.Engine.main()方法。
根據(jù)datax.py文件的以下幾行配置項(xiàng)目的參數(shù)
DEFAULT_JVM = "-Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%s/log" % (DATAX_HOME)
DEFAULT_PROPERTY_CONF = "-Dfile.encoding=UTF-8 -Dlogback.statusListenerClass=ch.qos.logback.core.status.NopStatusListener -Djava.security.egd=file:///dev/urandom -Ddatax.home=%s -Dlogback.configurationFile=%s" % (
DATAX_HOME, LOGBACK_FILE)
ENGINE_COMMAND = "java -server ${jvm} %s -classpath %s ${params} com.alibaba.datax.core.Engine -mode ${mode} -jobid ${jobid} -job ${job}" % (
DEFAULT_PROPERTY_CONF, CLASS_PATH)
配置JVM參數(shù)如下
-Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath={DATAX_HOME}/log
-
配置環(huán)境變量
-Dfile.encoding=UTF-8 -Dlogback.statusListenerClass=ch.qos.logback.core.status.NopStatusListener -Djava.security.egd=file:///dev/urandom -Ddatax.home=%s -Dlogback.configurationFile=%s"
去掉-D熏迹,配置在
image.png 配置啟動項(xiàng)
從Engine類的第124行到126行可以看出檐薯,啟動項(xiàng)需要配置三個參數(shù):mode凝赛、jobid和job注暗,jobid如果不配置的話默認(rèn)為-1,但是只有mode是standalone模式時墓猎,jobid才能取-1的值捆昏,job配置了json文件位置
options.addOption("job", true, "Job config.");
options.addOption("jobid", true, "Job unique id.");
options.addOption("mode", true, "Job runtime mode.");
以我的情況為例:
-mode standalone -jobid -1 -job \...\oracle2mysql.json
- 啟動java項(xiàng)目
直接在idea里面運(yùn)行項(xiàng)目,控制臺最后輸出一下日志:
15:21:08.806 [job-0] INFO c.a.datax.core.job.JobContainer -
任務(wù)啟動時刻 : 2018-09-18 15:20:36
任務(wù)結(jié)束時刻 : 2018-09-18 15:21:08
任務(wù)總計(jì)耗時 : 31s
任務(wù)平均流量 : 76.27KB/s
記錄寫入速度 : 165rec/s
讀出記錄總數(shù) : 4956
讀寫失敗總數(shù) : 0