DataX是阿里推出的异构数据源离线同步工具。详细介绍和使用请参考官网介绍和快速入门。DataX系列主要是比较详细的介绍了整个操作的原理。ConfigurationDataX配置解析包括三个文件:job.json、core.json、plugin.json。这三个json文件都是多级json配置,比如a.b.c=d的json。如果我们通过json获取,我们一般是先通过keya获取b.c的json,再通过keyb获取c。Josn,最后通过c的key得到d,所以代码写起来很繁琐。DataX提供了一个Configuration类可以直接压扁json。让我们看看下面的例子。publicstaticStringJSON="{'a':{'b':{'c':'d'}}}";publicstaticvoidmain(String[]args){配置配置=Configuration.from(JSON);System.out.println(configuration.get("a.b"));System.out.println(configuration.get("a.b.c"));System.out.println(configuration.get("a.b.d"));}运行结果如下。可以看到通过Configuration可以很方便的获取到json的多级数据。除了get之外,还有merge、根据String类型getString、getNecessaryValue等方法,这里不再介绍。{"c":"d"}dnulljob.jsonjob.json是作业的配置文件。任务运行前,通过参数传入配置文件的全路径,所以名称可以自定义。主要配置内容包括job.content.reader、job.content.writer、job.setting.speed。Reader和writer可以参考各个对应模块中的resources/plugin_job_template.json文件,也可以直接通过命令获取。快速入门的方式中有示例。主要指定使用哪个reader读取数据,使用哪个writer写入数据,以及reader和writer的相关配置信息。setting.speed是主要的流量控制,后面会详细说明。{“工作”:{“内容”:[{“读者”:{“名称”:“streamreader”,“参数”:{}},“作者”:{“名称”:“streamwriter”,“参数”:{}}}],"setting":{"speed":{"channel":5}}}}core.json的完整路径在DATAX_HOME/conf/core.json,配置一些全局信息,比如taskGroup的channel数量,类型转换在这里配置。{“条目”:{“jvm”:“-Xms1G-Xmx1G”,“环境”:{}},“共同”:{“列”:{“datetimeFormat”:“yyyy-MM-ddHH:mm:ss","timeFormat":"HH:mm:ss","dateFormat":"yyyy-MM-dd","extraFormats":["yyyyMMdd"],"timeZone":"GMT+8","encoding":"utf-8"}},"core":{"dataXServer":{"address":"http://localhost:7001/api","timeout":10000,"reportDataxLog":false,"reportPerfLog":false},"transport":{"channel":{"class":"com.alibaba.datax.core.transport.channel.memory.MemoryChannel","speed":{"byte":-1,"record":-1},“flowControlInterval”:20,“容量”:512,“byteCapacity”:67108864},“交换器”:{"class":"com.alibaba.datax.core.plugin.BufferedRecordExchanger","bufferSize":32}},"container":{"job":{"reportInterval":10000},"taskGroup":{"channel":5},"trace":{"enable":"false"}},"statistics":{"collector":{"plugin":{"taskClass":"com.alibaba.datax.core.statistics.plugin.task.StdoutPluginCollector","maxDirtyNumber":10}}}}}plugin.jsonplugin.json的完整路径为DATAX_HOME/plugin/reader/streamreader/plugin.json,这个streamreader对应上面的job.json加载后,会增加一个属性path,就是插件的实际路径。这个文件的主要内容是name和class,class是运行时要使用的插件类。由于会有一个读者和一个作家,所以这里会加载两个plugin.json。{"name":"streamreader","class":"com.alibaba.datax.plugin.reader.streamreader.StreamReader","description":{"useScene":"仅供开发者测试。","mechanism":“使用datax框架从流中传输数据。”,“警告”:“切勿在实际工作中使用它。”},"developer":"alibaba"}以上三个job.json,core.json,plugin.json文件加载后,会通过merge方法进行合并,所以最后的Configuration就是这些文件的合并信息,然后通过Configuration启动插件。
