最近工作中使用到了DataX工具,比较肤浅的看了看源码,做一个记录。比较肤浅的探讨,各位莫见笑。
【1】获取源码
源码地址(github):git@github.com:alibaba/DataX.git
源码地址(gitee):git@gitee.com:mirrors/DataX.git
本人是从gitee上下载的源码。
git clone源码之后,使用IDEA导入工程,查看userGuid.md文件,按照文件中的说明进行编译,生成target目录。
本人编译时,一次通过,没有遇到麻烦。如果这里有问题,可自行百度解决。
【2】安装python
参照userGuid.md文件,datax是使用python datax.py xxxx的命令行启动的,需要安装python,本人直接下载的当前最新版本(截至2022-12-05)
下载地址:https://www.python.org/ftp/python/3.11.0/python-3.11.0-amd64.exe
安装过程省略,最后需要选中添加path的选项,此处安装时未截图。安装完成后,可使用命令进行测试(在编译出的target/bin目录,即datax.py脚本所在目录下测试):
python datax.py -r txtfilereader -w txtfilewriter
运行结果如下,则说明python安装成功,datax已经编译成功。
【3】编写job文件
编写一个job文件,运行datax。如下的配置文件,并不能正确运行,但是已经可以进入具体的执行插件。为方便测试,本人使用的是txtfilereader和txtfilewriter插件。
{
"setting": {},
"job": {
"setting": {
"speed": {
"channel": 2
}
},
"content": [
{
"reader": {
"name": "txtfilereader",
"parameter": {
"path": ["E:/personal/src/DataX/target/datax/tmp"],
"encoding": "UTF-8",
"column": [
{
"index": 0,
"type": "long"
},
{
"index": 1,
"type": "boolean"
},
{
"index": 2,
"type": "double"
},
{
"index": 3,
"type": "string"
},
{
"index": 4,
"type": "date",
"format": "yyyy.MM.dd"
}
],
"fieldDelimiter": ","
}
},
"writer": {
"name": "txtfilewriter",
"parameter": {
"path": "E:/personal/src/DataX/target/datax",
"fileName": "target.txt",
"writeMode": "truncate",
"format": "yyyy-MM-dd"
}
}
}
]
}
}
View Code
执行该作业,得到以下输出(忽略第2个红框内容。此步骤未截图,直接使用的下一步骤的图):
【4】配置debug环境
为了在IDEA里调试代码,必须具备debug环境,而当前python运行的方式,是无法进入到debug环境中的。因此,对datax.py进行了修改,打印出命令行参数,配置到了IDEA中。
如下图,仅在datax.py第236行,加了打印。235行的日志,都是原代码里的。
运行后,会得到上一步骤图中第2个红框的内容,即datax运行的命令行参数。有了参数,就可以配置到IDEA中,并在IDEA环境下运行datax。
下面是本人截取的命令行参数:
-server
-Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\personal\src\DataX\target\datax/log -Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\personal\src\DataX\target\datax/log -Dloglevel=info -Dfile.encoding=UTF-8 -Dlogback.statusListenerClass=ch.qos.logback.core.status.NopStatusListener -Djava.security.egd=file:///dev/urandom -Ddatax.home=E:\personal\src\DataX\target\datax -Dlogback.cOnfigurationFile=E:\personal\src\DataX\target\datax/conf/logback.xml -classpath E:\personal\src\DataX\target\datax/lib/* -Dlog.file.name=tax\job\filejob_json
com.alibaba.datax.core.Engine
-mode standalone -jobid -1 -job E:\personal\src\DataX\target\datax\job\filejob.json
其中,-server参数配置时报错,将其去除后,并未发现影响,因此先将其去除,在以后调试过程中如果发现需要该参数,再查找对应的配置。
IDEA配置过程,注意看红框内的配置即可。
【5】debug
通过刚才的参数也可以看到,启动类是 com.alibaba.datax.core.Engine ,找到该类,打上断点。点debug按钮,进行debug:
可看到,顺利的进入了debug模式。
至此,datax源码的debug环境搭建完成。后续将以txtfilereader、txtfilewriter为例,进行浅显的datax源码分析。