文章目录
DataX
阿里开源的一个异构数据源离线同步工具,实现各种异构数据源之间稳定高效的数据同步功能。
官方文档
-
git
https://github.com/alibaba/DataX- 快速使用
https://github.com/alibaba/DataX/blob/master/userGuid.md
- 快速使用
-
gitee
https://gitee.com/mirrors/DataX/tree/master -
原理介绍
https://github.com/alibaba/DataX/blob/master/introduction.md
https://developer.aliyun.com/article/59373 -
使用案例
https://developer.aliyun.com/article/696839?spm=a2c6h.14164896.0.0.1df954a7TtovqZ
DataX3.0框架设计
将数据源读取和写入抽象成为Reader/Writer插件
Reader
Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
Framework
Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
Transformer
https://github.com/alibaba/DataX/blob/master/transformer/doc/transformer.md
Writer
Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
调度
Job:DataX完成单个数据同步的作业
Job启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行
每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
使用
1. 创建作业的配置文件(json格式)
{
//一个dx作业
"job": {
//数据的源和目的
"content": [
{
//读数据 配置
"reader": {
//reader插件名称
"name": "reader插件",
//插件入参
"parameter": {
}
},
//写数据 配置
"writer": {
"name": "writer插件",
"parameter": {
"encoding": "",
"print": true
}
}
}
],
//全局channel配置,脏数据配置,限速配置等
"setting": {
"speed": {
"channel": ""
}
}
}
}
插件配置详解
在github可以看到,支持的插件都在根目录下,命名规则是: 数据源 + reader/writer
在插件目录下有 doc/xxx.md 文件,详细介绍了该插件的使用入参
- myslq 读写插件
https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md
https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md - odps 读写插件
https://github.com/alibaba/DataX/blob/master/odpsreader/doc/odpsreader.md
https://github.com/alibaba/DataX/blob/master/odpswriter/doc/odpswriter.md - es 写插件
https://github.com/alibaba/DataX/blob/master/elasticsearchwriter/doc/elasticsearchwriter.md
2. java启动datax任务
# 官方提供的python启动范式, 启动的时候会加载两个配置文件 datax.py 和job.json
$ python datax.py ./job.json
DataX 3.0执行 入口类:com.alibaba.datax.core.Engine
datax.py 转换为java脚本 :
java
#JVM启动参数
-server
-Xms1g
-Xmx1g
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/dataXPath/log
#环境变量
-Dloglevel=info
-Dfile.encoding=UTF-8
-Dlogback.statusListenerClass=ch.qos.logback.core.status.NopStatusListener
-Djava.security.egd=file:///dev/urandom
-Ddatax.home=/dataXPath
-Dlogback.configurationFile=/dataXPath/conf/logback.xml
-classpath /dataXPath/lib/*
-Dlog.file.name=jobName
com.alibaba.datax.core.Engine
-mode standalone
-jobid -1
-job /dataXPath/bin/jobName.json
- com.alibaba.datax.core.Engine的三个参数,分别是job、jobid和mode,
- 其中job是用户配置的json文件路径,
- jobid和mode 是python文件带进来的,单机模式下可以忽略
//在Java项目中可以 自己拼接出启动参数,然后runtime.exec执行
Process process = runtime.exec("");
3. 同步结果分析
同步进程执行完后,获取执行日志。根据日志分析同步结果
...
2015-12-17 11:20:25.263 [job-0] INFO JobContainer -
任务启动时刻 : 2015-12-17 11:20:15
任务结束时刻 : 2015-12-17 11:20:25
任务总计耗时 : 10s
任务平均流量 : 205B/s
记录写入速度 : 5rec/s
读出记录总数 : 50
读写失败总数 : 0