热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

DataX源码分析一:环境搭建

最近工作中使用到了DataX工具,比较肤浅的看了看源码,做一个记录。比较肤浅的探讨,各位莫见笑。 【1】获取源码源码地址(github):git@github.com:alibab

最近工作中使用到了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源码分析。

 



推荐阅读
  • 本文详细介绍了如何通过修改Lua源码或使用动态链接库(DLL)的方式实现Lua与C++之间的高级交互,包括如何编译Lua源码、添加自定义API以及在C++中加载和调用Lua脚本。 ... [详细]
  • 本文详细介绍了在Java项目中如何使用de.codecentric.namespace.weatherservice.Weather类中的getServiceName()方法,并提供了多个实际应用的代码示例。 ... [详细]
  • 假设您当前位于主分支(版本C4),但发现某些功能已损坏,而这些功能在之前的版本C1时还能正常工作。如何将从C1到C4的所有提交复制到一个新的特性分支中,同时将主分支回滚至C1,以便能够安全地进行版本控制和持续集成部署? ... [详细]
  • 本文深入探讨了在Java编程语言中,如何使用`org.apache.polygene.api.association.AssociationDescriptor.qualifiedName()`方法,并提供了多个实际应用的代码示例。这些示例源自GitHub、StackOverflow和Maven等知名平台,旨在帮助开发者更好地理解和应用这一方法。 ... [详细]
  • 本文详细介绍了Java中io.rsocket.RSocket类的dispose()方法,并提供了多个实际应用中的代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • Python学习笔记:使用MyQR库创建动态彩色二维码
    本文介绍了如何利用Python的MyQR库来生成动态彩色二维码,包括库的安装方法、基本使用案例以及参数详解,特别针对动态图生成速度过快的问题提供了解决方案。 ... [详细]
  • 如何创建个性化Ubuntu Live CD
    随着Ubuntu频繁的版本更新,越来越多的用户开始探索创建个性化Ubuntu Live CD的方法。这不仅能满足特定的硬件和软件需求,还能极大地提升用户体验。本文将详细介绍使用Distroshare Ubuntu Imager创建定制化Ubuntu Live CD的过程。 ... [详细]
  • Working with Errors in Go 1.13
    作者|陌无崖 ... [详细]
  • 本文档详细介绍了在 CentOS Linux 7.9 系统环境下,如何从源代码编译安装 libwebsockets 库及其示例程序,并提供了编译过程中可能遇到的问题及解决方案。 ... [详细]
  • 本文探讨了在Git子模块目录中运行pre-commit时遇到的错误,并提供了一种通过Docker环境解决此问题的方法。 ... [详细]
  • Alluxio 1.5.0 版本发布:增强功能与优化
    Alluxio 1.5.0 开源版本引入了多项新特性和改进,旨在提升数据访问速度和系统互操作性。 ... [详细]
  • 本教程旨在指导开发者如何在Mac上设置React Native的开发环境,以进行iOS应用的开发。文中详细介绍了必要的软件安装步骤,包括Xcode、Homebrew、Node.js、Watchman以及React Native CLI等工具的安装方法。 ... [详细]
  • 本文介绍了一种算法,用于从一个整数的末尾获取第 K 位数字。如果该位置不存在,则返回 -1。 ... [详细]
  • This pull request aims to optimize the npm install retry time in branch 0.7, reducing delays caused by long timeouts when no network connection is available. ... [详细]
  • 本文详细介绍了SSH(Secure Shell)的基础知识、应用场景以及如何在不同平台上使用SSH进行安全的远程操作。文章还探讨了SSH的高级用法,如免密登录和其他安全增强措施。 ... [详细]
author-avatar
ougq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有