接上回:python 調度 datax的json配置文件。
用datax_web 原因:后續有各個項目需要用到datax抽數據,配置json浪費時間,用python腳本去調度也麻煩,datax_web 可以批量配置ison 並存儲到數據庫里,遷移也方便。
1、環境:java 1.8
python 3.7
mysql 8.0.19
maven >=3.6.1
hadoop 2.6 + windows運行需要的winutils.exe(自己用報錯信息找一下,我忘了在哪下載的了)
datax_web 2.1.2
2、下載datax
直接下載:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
就不要去下沒有打包的版本了,省的麻煩。
解壓之后有可能有“._XXXX”這種的文件,全都搜出來刪除掉
3、下載datax_web
下載GitHub開源版本:https://github.com/WeiYe-Jing/datax-web
clone 或者直接下載zip隨意。
下載下來之后
拉到idea 中進行配置:
1、maven環境變量配置就不說了,conf配置網上多的很,別忘了idea中的maven配置,我這個有以前的maven 3.6的倉庫,所以直接用了,沒有倉庫的自己建一個,之后等依賴自己下載完。
2、mysql建表
直接用自帶的腳本在mysql客戶端建個database 命名為datax_web,在這個數據庫中跑一下腳本就行了
3、修改datax_web 中 配置
datax-admin下配置修改:坑1、時區問題,mysql8時區一般都是UTC,那么東八區是要加八個小時,url中加上 serverTimezone=GMT%2B8
如果你用原本的上海的時區沒問題的化就不用改了
坑2、driver-class-name: com.mysql.cj.jdbc.Driver 這個一般是mysql8用的,5用的是不加cj的
datax-executor下配置修改:該注釋的注釋掉,該開的開,最后一行 datax路徑改成自己的路徑:pypath: D:\workspace\datax\datax\bin\datax.py
server: port: 8080 # port: ${server.port} spring: #數據源 datasource: username: root #你的mysql 用戶 和密碼 password: 123456 url: jdbc:mysql://localhost:3306/datax_web?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8 # &&serverTimezone=GMT # 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.cj.jdbc.Driver hikari: ## 最小空閑連接數量 minimum-idle: 5 ## 空閑連接存活最大時間,默認600000(10分鍾) idle-timeout: 180000 ## 連接池最大連接數,默認是10 maximum-pool-size: 10 ## 數據庫連接超時時間,默認30秒,即30000 connection-timeout: 30000 connection-test-query: SELECT 1 ##此屬性控制池中連接的最長生命周期,值0表示無限生命周期,默認1800000即30分鍾 max-lifetime: 1800000 # 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 management: health: mail: enabled: false server: servlet: context-path: /actuator mybatis-plus: # mapper.xml文件掃描 mapper-locations: classpath*:/mybatis-mapper/*Mapper.xml # 實體掃描,多個package用逗號或者分號分隔 #typeAliasesPackage: com.yibo.essyncclient.*.entity global-config: # 數據庫相關配置 db-config: # 主鍵類型 AUTO:"數據庫ID自增", INPUT:"用戶輸入ID", ID_WORKER:"全局唯一ID (數字類型唯一ID)", UUID:"全局唯一ID UUID"; id-type: AUTO # 字段策略 IGNORED:"忽略判斷",NOT_NULL:"非 NULL 判斷"),NOT_EMPTY:"非空判斷" field-strategy: NOT_NULL # 駝峰下划線轉換 column-underline: true # 邏輯刪除 logic-delete-value: 0 logic-not-delete-value: 1 # 數據庫類型 db-type: mysql banner: false # mybatis原生配置 configuration: map-underscore-to-camel-case: true cache-enabled: false call-setters-on-nulls: true jdbc-type-for-null: 'null' type-handlers-package: com.wugui.datax.admin.core.handler # 配置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-job, access token datax: job: accessToken: #i18n (default empty as chinese, "en" as english) i18n: ## triggerpool max size triggerpool: fast: max: 200 slow: max: 100 ### log retention days logretentiondays: 30 datasource: aes: key: AD42F6697B035B75
4、啟動admin,然后啟動 executor
可能出現的問題1:缺少hadoop windows的運行路徑,一般缺少的是這兩個文件,從網上下載下來放到hadoop_home下的bin里
進網頁上看吧,http://127.0.0.1:8080/index.html 初始用戶名密碼:admin 123456
5、任務配置流程
5.1、數據源配置:以mysql為例,因為我的mysql時區問題,連接串后面加這個就可以了,oracle這些數據庫都沒啥問題。測試數據庫連接是否成功,如果不成功那么基本是時區的問題
5.2、項目管理:隨意
5.2、任務模板配置:
5.3、測試表新建,在你的數據源和目標數據源新建數據庫,分別新建源表和目標表,源表與目標表結構一致,源表隨意造點數據。新建源表和目標表數據源,同5.1
5.4、任務構建:
單個任務:選擇數據源和表名,字段選擇->目標表數據源,字段選擇->構建json->選擇模板->ok
批量任務構建:直接把數據源中的所有表展示,手動點擊需要哪些表,目標表是自動對應的,流程和單個任務一樣。
5.5、任務測試:
單個任務:直接點擊操作的執行
多任務手動調用:新建個python任務,里面直接寫個print("隨意"),如果是python2.7那就直接寫 print '隨意';子任務下選擇多個任務。
5.6、日志查看
錯誤1:執行器沒有運行。datax-executor啟動執行器
錯誤2:存在超過一個time_zone,datax里面的lib缺少mysql驅動,版本就從datax_web中依賴中找出來復制到datax的lib和讀寫的文件夾下,好好檢查
路徑大概是:總libs:D:\workspace\datax\datax\lib 讀: D:\workspace\datax\datax\plugin\reader\mysqlreader\libs 寫:D:\workspace\datax\datax\plugin\writer\mysqlwriter\libs
讀寫中一般都是
總libs添加上你的mysql數據庫同版本驅動,或者同代版本好像也行
6、打包
打包之前先把repackage在admin和executor的pom中給加上,放在build標簽里面
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
完事之后:在maven工具箱里面點擊 datax_web下的clean ,完畢之后再點擊package 打jar包
把admin 和exetor中target中的jar包單獨拿出來放到自己的文件夾中,執行這兩個jar包肯定會報錯,你打開看下jar包里面沒有配置文件和mapper,那么把admin下target中的配置文件和分別拉到jar包中,executor只需要拉個配置文件。如下:都在classes文件夾中
完事后,java -jar 運行這兩個jar
可以登錄了。