版本說(shuō)明
datax 3.0
datax-web 2.1.2
mysql MySQL8 MariaDB10
datax 部署
- 準(zhǔn)備環(huán)境: linux, java8, python3
需要 java 和 jps
sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk/jdk/bin/java 300
sudo update-alternatives --install /usr/bin/jps jps /usr/lib/jdk/jdk/bin/jps 300
其中, /usr/lib/jdk/jdk/ 是 jdk 的安裝位置
下載,官方github給出了編譯后的jar壓縮包地址 datax.tar.gz
源碼編譯打包使用 maven 命令 mvn -U clean package assembly:assembly -Dmaven.test.skip=true
結(jié)果在 target 里, 和下載的 一樣是 datax.tar.gz解壓到自己希望的位置上 tar -zxvf datax3.tar.gz
(可選) 替換 python3 適用的腳本. 把 bin 下的三個(gè)文件替換為 datax-web 提供的 python3 版本
測(cè)試 datax 命令行. 在 datax 目錄下
python3 bin/datax.py job/job.json
有如下輸出即表示成功(當(dāng)然這只是從memery讀,寫(xiě)到console的這一種)
2021-09-27 18:37:26.012 [job-0] INFO JobContainer -
任務(wù)啟動(dòng)時(shí)刻 : 2021-09-27 18:37:15
任務(wù)結(jié)束時(shí)刻 : 2021-09-27 18:37:26
任務(wù)總計(jì)耗時(shí) : 10s
任務(wù)平均流量 : 253.91KB/s
記錄寫(xiě)入速度 : 10000rec/s
讀出記錄總數(shù) : 100000
讀寫(xiě)失敗總數(shù) : 0
- 替換 mysql 驅(qū)動(dòng)為 8.x. 見(jiàn)后文注意
datax-web 部署
下載源碼 git@github.com:WeiYe-Jing/datax-web.git
編譯打包 mvn clean install (百度網(wǎng)盤的下載速度還不如clone編譯的快呢)
解壓到希望的位置 tar -zxvf datax-web-2.1.2.tar.gz
執(zhí)行 ./bin/install.sh
按照提示初始話 datax-web 自己的配置數(shù)據(jù)庫(kù)配置datax (我這里忽略了email 的配置)
vim modules/datax-executor/bin/env.properties
## PYTHON腳本執(zhí)行位置
#PYTHON_PATH=/home/hadoop/install/datax/bin/datax.py
PYTHON_PATH=/home/aaa/bin/datax3/bin/datax.py
如果使用 python3, 把要使用的 python 放到 PATH 的前面(注意 PATH 里要能找到 python 命令, python3不行,盡管在datax里#! 指定了 python3)
vim modules/datax-executor/bin/datax-executor.sh
PATH=/opt/minconda/mypyenv/bin:$PATH
修改了環(huán)境變量需要重啟服務(wù)
- 替換 mysql 驅(qū)動(dòng)為 8.x. 見(jiàn)后文注意
datax-web 使用
啟動(dòng) web 服務(wù)
啟動(dòng)服務(wù) ./bin/start-all.sh
停止服務(wù) ./bin/stop-all.sh
jps 查看服務(wù), 如果存在下面兩個(gè)進(jìn)程,即成功運(yùn)行
DataXAdminApplication
DataXExecutorApplication訪問(wèn) web 服務(wù)
訪問(wèn)(注意后面的路徑/index.html 不能丟,這里沒(méi)有默認(rèn)重定向)
http://ip:9527/index.html
默認(rèn)用戶名 admin 密碼 123456
登錄后在 "用戶管理" 里修改密碼執(zhí)行數(shù)據(jù)同步,依次進(jìn)行如下操作
創(chuàng)建項(xiàng)目
添加數(shù)據(jù)源
創(chuàng)建任務(wù)模板
任務(wù)構(gòu)建(有坑,見(jiàn)后文)
任務(wù)管理里啟動(dòng)任務(wù)
日志管理里查看執(zhí)行日志
datax 命令行使用
執(zhí)行一次數(shù)據(jù)同步
python3 bin/datax.py job/stream2stream.json
查看 job 配置模板
python3 bin/datax.py -r mysqlreader -w mysqlwriter
其中, -r 參數(shù)指定使用的 reader, -w 參數(shù)指定使用的 writer. 有哪些 reader writer 可以查看 plugin 目錄.
注意
- jdbcUrl 需要參數(shù)
serverTimezone=Asia/Shanghai
, 否則會(huì)有類似下面的報(bào)錯(cuò)報(bào)錯(cuò):
Code:[DBUtilErrorCode-10], Description:[連接數(shù)據(jù)庫(kù)失敗. 請(qǐng)檢查您的 賬號(hào)、密碼、數(shù)據(jù)庫(kù)名稱乏矾、IP蔓彩、Port或者向 DBA 尋求幫助(注意網(wǎng)絡(luò)環(huán)境).]. - 具體錯(cuò)誤信息為:...
2021-09-27 01:14:32 [AnalysisStatistics.analysisStatisticsLog-53] 2021-09-27 01:14:32.737 [job-0] ERROR RetryUtil - Exception when calling callable, 異常Msg:Code:[DBUtilErrorCode-10], Description:[連接數(shù)據(jù)庫(kù)失敗. 請(qǐng)檢查您的 賬號(hào)摔寨、密碼绪撵、數(shù)據(jù)庫(kù)名稱、IP境蔼、Port或者向 DBA 尋求幫助(注意網(wǎng)絡(luò)環(huán)境).]. - 具體錯(cuò)誤信息為:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
2021-09-27 01:14:32 [AnalysisStatistics.analysisStatisticsLog-53] com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-10], Description:[連接數(shù)據(jù)庫(kù)失敗. 請(qǐng)檢查您的 賬號(hào)厅贪、密碼蠢护、數(shù)據(jù)庫(kù)名稱、IP养涮、Port或者向 DBA 尋求幫助(注意網(wǎng)絡(luò)環(huán)境).]. - 具體錯(cuò)誤信息為:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
2021-09-27 01:14:32 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:26) ~[datax-common-0.0.1-SNAPSHOT.jar:na]
- mysql8需要更換jdbcDriver mysql-connector, 注意有三處
- datax里 plugin/reader/mysqlreader/libs 的 mysql-connector-java-5.1.34.jar
- datax里 plugin/writer/mysqlwriter/libs 的 mysql-connector-java-5.1.34.jar
- datax-web里 modules/datax-admin/lib 的 mysql-connector-java-5.1.47.jar
cp mysql-connector-java-8.0.22.jar ~/bin/datax3/plugin/reader/mysqlreader/libs
cp mysql-connector-java-8.0.22.jar ~/bin/datax3/plugin/writer/mysqlwriter/libs
cp mysql-connector-java-8.0.22.jar ~/bin/datax-web-2.1.2/modules/datax-admin/lib
jdbc驅(qū)動(dòng)類: mysql8的驅(qū)動(dòng)與之前版本不同, 注意中間的 cj. 為 com.mysql.cj.jdbc.Driver
job 配置里 setting 不能有 byte 參數(shù).(見(jiàn)后文)
job 配置 json 里的 writer 里, "writeMode": "update" 可以覆蓋更新.
在 writer 里,寫(xiě)入前禁用索引,寫(xiě)入后打開(kāi)索引,可以適當(dāng)提高寫(xiě)入速度(如果業(yè)務(wù)允許的話)
下面是 mysql 的寫(xiě)法. /*!40000 xxx */
是 mysql 的方言指令,不是注釋
"preSql": [
"LOCK TABLES `aim_table_name` WRITE",
"/*!40000 ALTER TABLE `aim_table_name` DISABLE KEYS */"
],
"postSql": [
"/*!40000 ALTER TABLE `aim_table_name` ENABLE KEYS */",
"UNLOCK TABLES"
],
job 配置示例(json里不支持注釋,這里的注釋只做說(shuō)明用)
{
"job": {
"setting": {
"speed": {
"channel": 3
// 下面這個(gè)參數(shù)不能有了
// , "byte": 1048576
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "xxx加密的",
"password": "yyy加密的",
"column": [
"`id`",
// 省略
],
"splitPk": "",
"connection": [
{
"table": [
"tab_name_from"
],
"jdbcUrl": [
"jdbc:mysql://<ip or domain>:<port>/db_name?serverTimezone=Asia/Shanghai"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"username": "aaa加密的",
"password": "bbb加密的",
// 對(duì)于 mysql, writeMode 為 update 時(shí)會(huì)執(zhí)行覆蓋更新
"writeMode": "update",
"column": [
"`id`",
// 省略
],
// 寫(xiě)入前臨時(shí)禁用索引
"preSql": [
"LOCK TABLES `tab_name_to` WRITE",
"/*!40000 ALTER TABLE `tab_name_to` DISABLE KEYS */"
],
// 寫(xiě)入后打開(kāi)索引
"postSql": [
"/*!40000 ALTER TABLE `tab_name_to` ENABLE KEYS */",
"UNLOCK TABLES"
],
"connection": [
{
"table": [
"tab_name_to"
],
"jdbcUrl": "jdbc:mysql://<ip or domain>:<port>/db_name?serverTimezone=Asia/Shanghai"
}
]
}
}
}
]
}
}