1 參考文檔
datax地址:https://github.com/alibaba/DataX/blob/master/userGuid.md
datax-web地址(Windows):https://github.com/WeiYe-Jing/datax-web/blob/master/userGuid.md 、
datax-web地址(Linux):https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md
2 DataX前置條件
- JDK(1.8以上,推薦1.8)
- Python(推薦Python2.6.X)
- Apache Maven 3.x (Compile DataX)
注意:
①一定要為Python2,因為后面執行datax.py的時候,里面的Python的print會執行不了,導致運行不成功,會提示你print語法要加括號,Python2中加不加都行,Python3中必須要加,否則報語法錯。python版本查看(通常系統自帶2.x版本)
3 安裝DataX
3.1 下載tar包
方式一:直接下載DataX工具包
方式二:下載DataX源碼、編譯
(1)下載datax源碼
$ git clone git@github.com:alibaba/DataX.git
(2)通過maven打包
$ cd {DataX_source_code_home} $ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
打包成功后的DataX包位於 {DataX_source_code_home}/target/datax/datax/
3.2 解壓驗證
將jar包解壓至本地某個目錄,進入bin目錄,即可運行同步作業:
$ tar -zxvf datax.tar.gz -C {YOUR_DATAX_HOME}
$ cd {YOUR_DATAX_HOME}/bin
$ python datax.py {YOUR_JOB.json}
3.3 自檢腳本
python {YOUR_DATAX_HOME}/bin/datax.py {YOUR_DATAX_HOME}/job/job.json
3.4 查看配置模板
python datax.py -r {YOUR_READER} -w {YOUR_WRITER}
$ cd {YOUR_DATAX_HOME}/bin
$ python datax.py -r streamreader -w streamwriter
stream->stream模板
DataX (DATAX-OPENSOURCE-3.0), From Alibaba ! Copyright (C) 2010-2017, 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 use python {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": "" } } } }
3.5 配置示例
(1)創建作業的配置文件(json格式)
根據模板修改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 } } } }
(2)啟動DataX
$ cd {YOUR_DATAX_DIR_BIN}
$ python datax.py ./stream2stream.json
(3)查看結果
2021-08-31 14:07:48.816 [job-0] INFO JobContainer - 任務啟動時刻 : 2021-08-31 14:07:38 任務結束時刻 : 2021-08-31 14:07:48 任務總計耗時 : 10s 任務平均流量 : 95B/s 記錄寫入速度 : 5rec/s 讀出記錄總數 : 50 讀寫失敗總數 : 0
4 DataX-Web前置條件
- MySQL (5.5+) 必選,對應客戶端可以選裝, Linux服務上若安裝mysql的客戶端可以通過部署腳本快速初始化數據庫
- JDK (1.8.0_xxx) 必選
- Maven (3.6.1+) 必選
- DataX 必選
- Python (2.x) (支持Python3需要修改替換datax/bin下面的三個python文件,替換文件在doc/datax-web/datax-python3下) 必選
- 注意:主要用於調度執行底層DataX的啟動腳本,默認的方式是以Java子進程方式執行DataX,用戶可以選擇以Python方式來做自定義的改造
5 Linux安裝DataX-Web
5.1 下載tar包
方式一:下載官方提供的版本tar包
官方tar包下載地址 提取碼:cpsk
方式二:下載源碼、編譯打包
直接從git下載源碼,在項目的根目錄下執行如下命令 mvn clean install ,執行成功后將會在工程的build目錄下生成安裝包 build/datax-web-{VERSION}.tar.gz 。
5.2 解壓安裝包
$ tar -zxvf datax-web-{VERSION}.tar.gz -C {YOUR-DATAX-WEB-HOME}
5.3 執行一鍵安裝腳本
(1)交互式安裝
$ cd {YOUR-DATAX-WEB-HOME}
$ ./bin/install.sh
(2)強制安裝
$ ./bin/install.sh --force
注意:在交互模式下,對各個模塊的package壓縮包的解壓以及configure配置腳本的調用,都會請求用戶確認,可根據提示查看是否安裝成功,如果沒有安裝成功,可以重復嘗試;如果不想使用交互模式,跳過確認過程,則可以使用--force參數。
5.4 數據庫初始化
(1)如果服務器上有mysql,則在執行過程中根據提醒輸入數據庫地址、端口號、用戶名、密碼、數據庫名稱
Scan out mysql command, so begin to initalize the database Do you want to initalize database with sql: [{INSTALL_PATH}/bin/db/datax-web.sql]? (Y/N)y Please input the db host(default: 127.0.0.1): Please input the db port(default: 3306): Please input the db username(default: root): Please input the db password(default: ): Please input the db name(default: exchangis)
(2)如果服務器上沒有mysql,則可以根據{YOUR-DATAX-WEB-HOME}/bin/db/datax-web.sql腳本手動執行,完成后需修改相關配置文件
$ vim {YOUR-DATAX-WEB-HOME}/modules/datax-admin/conf/bootstrap.properties
#Database DB_HOST=127.0.0.1 DB_PORT=3306 DB_USERNAME=root DB_PASSWORD=Dataapply@123456 DB_DATABASE=dataxweb
5.5 配置
(1)配置郵件服務(可以跳過)
$ vim {YOUR-DATAX-WEB-HOME}/modules/datax-admin/bin/env.properties
# environment variables #JAVA_HOME="" WEB_LOG_PATH=${BIN}/../logs WEB_CONF_PATH=${BIN}/../conf DATA_PATH=${BIN}/../data SERVER_PORT=9527 #默認端口號 #PID_FILE_PATH=${BIN}/dataxadmin.pid # mail account MAIL_USERNAME="" MAIL_PASSWORD="" #debug #REMOTE_DEBUG_SWITCH=true #REMOTE_DEBUG_PORT=7003
(2)制定PYTHON-PATH路徑
$ vim {YOUR-DATAX-WEB-HOME}/modules/datax-execute/bin/env.properties
# environment variables #JAVA_HOME="" SERVICE_LOG_PATH=${BIN}/../logs SERVICE_CONF_PATH=${BIN}/../conf DATA_PATH=${BIN}/../data ## datax json文件存放位置 JSON_PATH=${BIN}/../json ## executor_port EXECUTOR_PORT=9999 ## 保持和datax-admin端口一致,默認是9527,如果沒改動datax-admin的端口,可以忽略 DATAX_ADMIN_PORT= ## PYTHON腳本執行位置 #PYTHON_PATH=/home/hadoop/install/datax/bin/datax.py PYTHON_PATH= ## dataxweb 服務端口 SERVER_PORT=9504 #PID_FILE_PATH=${BIN}/service.pid #debug 遠程調試端口 #REMOTE_DEBUG_SWITCH=true #REMOTE_DEBUG_PORT=7004
5.6 啟動服務
(1)一鍵啟動所有服務
$ {YOUR-DATAX-WEB-HOME}/bin/start-all.sh
(2)單一啟動某一模塊服務
$ {YOUR-DATAX-WEB-HOME}/bin/start.sh -m {module_name}
(3)一鍵停止所有服務
$ {YOUR-DATAX-WEB-HOME}/bin/stop-all.sh
(4)單一停止某一模塊服務
$ {YOUR-DATAX-WEB-HOME}/bin/stop.sh -m {module_name}
(5)如果啟動過程中部分模塊啟動失敗或卡住,可以退出重復執行,可以通過env.properties文件修改各模塊的環境配置
$ vim {YOUR-DATAX-WEB-HOME}/modules/{module_name}/bin/env.properties
(6)查看服務
$ jps
# 在Linux環境下使用JPS命令,查看是否出現DataXAdminApplication和DataXExecutorApplication進程,如果存在這表示項目運行成功
# 如果項目啟動失敗,請檢查啟動日志:modules/datax-admin/bin/console.out或者modules/datax-executor/bin/console.out
5.7 運行
瀏覽器地址:http://ip:port/index.html 用戶名:admin 密碼:123456 ip:datax-admin部署所在服務器的ip port:datax-admin指定的運行端口
運行日志:默認情況下,日志在{YOUR-DATAX-WEB-HOME}/modules/{module_name}/data/applogs下;用戶可以修改application.yml中的logpath地址來指定日志目錄,用戶可以根據此日志跟蹤項目實際啟動情況。
常見異常:如果executor啟動比admin快,執行器會連接失敗,日志報“拒絕連接”錯誤,一般先啟動admin,再啟動executor,30秒后會重連,如果成功可忽略該異常。
5.8 集群部署
$ vim {YOUR-DATAX-WB-HOME}/modules/datax-executor/conf/application.yml
(1)修改 /modules/datax-executor/conf/application.yml 文件中的 admin.addresses 地址。(為了方便單機版部署,項目目前沒有將ip部分配置到env.properties,部署多節點時可以將整個地址作為變量配置到env文件)
# web port server: port: ${server.port} #port: 8081 # log config logging: config: classpath:logback.xml path: ${data.path}/applogs/executor/jobhandler #path: ./data/applogs/executor/jobhandler datax: job: admin: ### datax admin address list, such as "http://address" or "http://address01,http://address02" #addresses: http://127.0.0.1:8080 addresses: http://127.0.0.1:${datax.admin.port} executor: appname: datax-executor ip: #port: 9999 port: ${executor.port:9999} ### job log path #logpath: ./data/applogs/executor/jobhandler logpath: ${data.path}/applogs/executor/jobhandler ### job log retention days logretentiondays: 30 ### job, access token accessToken: executor: #jsonpath: D:\\temp\\executor\\json\\ jsonpath: ${json.path} #pypath: F:\tools\datax\bin\datax.py #pypath: ${python.path} pypath: /app/datax/bin/datax.py
(2)將官方提供的tar包或編譯后的tar包上傳到服務節點,單一啟動某一模塊服務。如:執行器需要部署多個節點,則僅需要啟動執行器,執行 ./bin/start.sh -m datax-executor 。
(3)調度中心、執行器支持集群部署,提升調度系統容災和可用性
1.調度中心集群: DB配置保持一致; 集群機器時鍾保持一致(單機集群忽視); 2.執行器集群: 執行器回調地址(admin.addresses)需要保持一致;執行器根據該配置進行執行器自動注冊等操作。 同一個執行器集群內AppName(executor.appname)需要保持一致;調度中心根據該配置動態發現不同集群的在線執行器列表。
6 Windows安裝DataX-Web(開發環境)
6.1 下載源碼,IDEA打開

6.2 創建數據庫
執行 bin/db 下面的 datax_web.sql 文件(注意老版本更新語句有指定庫名)
6.3 修改項目配置
(1)修改 datax_admin 下 resources/application.yml 文件
①修改數據源配置,目前僅支持mysql
#數據源 datasource: # username: root #password: root #url: jdbc:mysql://localhost:3306/datax_web?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8 password: ${DB_PASSWORD:password} username: ${DB_USERNAME:username} url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_DATABASE:dataxweb}?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8 driver-class-name: com.mysql.jdbc.Driver
②修改日志路徑
# 配置mybatis-plus打印sql日志 logging: #level: # com.wugui.datax.admin.mapper: info #path: ./data/applogs/admin level: com.wugui.datax.admin.mapper: error path: ${data.path}/applogs/admin
③修改郵件發送配置
# datax-web email mail: host: smtp.qq.com port: 25 #username: xxx@qq.com #password: xxx username: ${mail.username} password: ${mail.password} properties: mail: smtp: auth: true starttls: enable: true required: true socketFactory: class: javax.net.ssl.SSLSocketFactory
(2)修改 datax_executor 下 resources/application.yml 文件
①修改日志路徑
# log config logging: config: classpath:logback.xml path: ${data.path}/applogs/executor/jobhandler #path: ./data/applogs/executor/jobhandler
②修改datax.job配置
datax: job: admin: ### datax admin address list, such as "http://address" or "http://address01,http://address02" #addresses: http://127.0.0.1:8080 addresses: http://127.0.0.1:${datax.admin.port} executor: appname: datax-executor ip: #port: 9999 port: ${executor.port:9999} ### job log path #logpath: ./data/applogs/executor/jobhandler logpath: ${data.path}/applogs/executor/jobhandler ### job log retention days logretentiondays: 30 ### job, access token accessToken: executor: #jsonpath: D:\\temp\\executor\\json\\ jsonpath: ${json.path} #pypath: F:\tools\datax\bin\datax.py pypath: ${python.path}
- 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存放在環境變量路徑下。
6.4 啟動項目
(1)本地idea開發環境
①運行datax_admin下 DataXAdminApplication
②運行datax_executor下 DataXExecutorApplication
(2)admin啟動成功后日志會輸出三個地址,兩個接口文檔地址,一個前端頁面地址

(3)啟動成功
web地址:http://localhost:8080/index.html#/dashboard
用戶名:admin
密碼:123456
6.5 DataX-Web前端頁面
地址:https://github.com/WeiYe-Jing/datax-web-ui 可以自定義風格
7 常見問題
7.1 python路徑
(1)Linux環境
問題:
創建項目並且執行查看日志顯示如下報錯導致無法執行成功 [AnalysisStatistics.analysisStatisticsLog-53] /usr/bin/python: can't find '_main_'
解決方案:修改datax-executor的pypath路徑為服務器下datax下的datax.py路徑
$ vim {YOUR-DATAX-WEB-HOME}/modules/datax-executor/conf/application.yml
# web port
server:
port: ${server.port}
#port: 8081
# log config
logging:
config: classpath:logback.xml
path: ${data.path}/applogs/executor/jobhandler
#path: ./data/applogs/executor/jobhandler
datax:
job:
admin:
### datax admin address list, such as "http://address" or "http://address01,http://address02"
#addresses: http://127.0.0.1:8080
addresses: http://127.0.0.1:${datax.admin.port}
executor:
appname: datax-executor
ip:
#port: 9999
port: ${executor.port:9999}
### job log path
#logpath: ./data/applogs/executor/jobhandler
logpath: ${data.path}/applogs/executor/jobhandler
### job log retention days
logretentiondays: 30
### job, access token
accessToken:
executor:
#jsonpath: D:\\temp\\executor\\json\\
jsonpath: ${json.path}
#pypath: F:\tools\datax\bin\datax.py
#pypath: ${python.path}
pypath: /app/datax/bin/datax.py
(2)Window環境
問題:

解決方案:
在datax-executor項目中,ExecutorJobHandler類的buildDataXExecutorCmd方法,把 cmdArr.add("python"); 改為 cmdArr.add("C:\\Python27\\python.exe"); //Python安裝目錄:

7.2 MySQL中文字段未同步
問題:MySQL同步到MySQL過程中,數據行同步成功,但是中文字段同步后為空。
解決方案:中文解析失敗,在添加MySQL數據源時,需要在url加上字符編碼參數:&characterEncoding=UTF-8
7.3 Hive中獲取文件系統失敗
問題:

解決方案:
在構建job文件時,對於hdfswriter,需要設置文件系統協議:hdfs
"writer":{ "name":"hdfswriter", "parameter":{ "column":[ { "name":"id", "type":"int" }, { "name":"name", "type":"string" } ], "defaultFS":"hdfs://10.207.228.17", "fieldDelimiter":",", "fileName":"abc", "fileType":"text", "path":"/user/hive/warehouse/test_datax", "writeMode":"append" } }
