Datax
總體流程圖
先看執(zhí)行的第一個(gè)步驟:
file
在最上層抽象類,這個(gè)里面相當(dāng)于獲取全局公共信息,java入口部分就是這個(gè)Engine的main方法直接啟動(dòng)
Engine 啟動(dòng)
- com.alibaba.datax.core.Engine#main直接啟動(dòng)
阿里這邊有提供多級JSON配置信息無損存儲(chǔ)
com.alibaba.datax.common.util.Configuration
但是平常的使用中很少有直接以json的格式操作,一般是轉(zhuǎn)成對象bean,然后進(jìn)行操作,
他在這邊新寫這個(gè)方法的目的主要在于對封閉的json進(jìn)行處理,直接從key獲取到value,但是我感覺還是可以直接轉(zhuǎn)成bean的形式去獲取比較方便.畢竟只有一個(gè)json的文件
直接main方法啟動(dòng),在datax.py腳本中設(shè)置了鎖需要的參數(shù)和json地址, 在啟動(dòng)的時(shí)候通過讀取啟動(dòng)參數(shù),獲取到當(dāng)前的啟動(dòng)配置文件.
這邊阿里使用了
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.3.1</version>
</dependency>
這個(gè)包 ,然后使用
Options options = new Options();
options.addOption("job", true, "Job config.");
options.addOption("id", true, "Job unique id.");
options.addOption("mode", true, "Job runtime mode.");
DefaultParser parser = new DefaultParser();
CommandLine cl = parser.parse(options, args);
String job = cl.getOptionValue("job");
String id = cl.getOptionValue("id");
String mode = cl.getOptionValue("mode");
來根據(jù)參數(shù)的名字進(jìn)行讀取.這個(gè)地方平常很少有用到,可以記錄下.
datax在執(zhí)行的過程中打了很多的日志,有個(gè)打印vminfo的class我感覺可以在平常使用到,之前我也寫過這種類似的,但是說效果不是很好,因?yàn)槲抑笆鞘褂玫哪_本去查詢的服務(wù)器上面的信息.
com.alibaba.datax.common.statistics.VMInfo#getVmInfo
這個(gè)類的話,在日志監(jiān)控或者效率監(jiān)控也可以使用到.
- com.alibaba.datax.core.Engine#start 進(jìn)入真正的執(zhí)行方法
前面基本上都是在對性能參數(shù)的賦值,然后獲取到了一個(gè)List<Configuration> taskConfigs
,將這個(gè)list轉(zhuǎn)成了map,然后再循環(huán)中開多線程執(zhí)行任務(wù).