文章目录

  • datax源码环境搭建
    • 写在前面
    • 环境
    • 下载源码并编译
      • 错误1
      • 错误2
    • 运行
      • 生产模式
      • debug模式

datax源码环境搭建

写在前面

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。

我最近打算花点时间,深度研究下DataX的源码。按照我以前看源码的经验,我一般都会在本地搭建好调试环境,通过debug的方式调试。

环境

这里是说我的本地环境。

  • macOS big sur
  • jdk8
  • idea 2021.01
  • Apache Maven 3.x
  • python 2.6.x

下载源码并编译

git clone https://github.com/alibaba/DataX.git

然后倒入idea,配置好maven,jdk等,用maven 进行编译。可能会遇到几个错误。

错误1

Could not find artifact org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde in alimaven (http://maven.aliyun.com/nexus/content/groups/public/)

这个问题我通过在maven的settings.xml里加了多加了两个镜像解决,

<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云spring插件仓库</name><url>https://maven.aliyun.com/repository/spring-plugin</url></mirror><mirror> <id>repo2</id> <name>Mirror from Maven Repo2</name> <url>https://repo.spring.io/plugins-release/</url> <mirrorOf>central</mirrorOf> </mirror>

错误2

[ERROR] Failed to execute goal on project oscarwriter: Could not resolve dependencies for project com.alibaba.datax:oscarwriter:jar:0.0.1-SNAPSHOT: Could not find artifact com.oscar:oscar:jar:7.0.8 at specified path /Users/malu/Documents/code/idea_study/DataX/oscarwriter/src/main/lib/oscarJDBC.jar -> [Help 1]

这个是因为,pom文件引用了这个jar,

<dependency><groupId>com.oscar</groupId><artifactId>oscar</artifactId><version>7.0.8</version><scope>system</scope><systemPath>${basedir}/src/main/lib/oscarJDBC.jar</systemPath></dependency>

这个oscar可能是阿里内部的存储或者第三方提交的插件,正常应该在源码里面加上这个jar包的,不过也没关系,我们把oscard相关的注释掉就可以了,反正也不会用到。

首先去项目根目录下的pom.xml搜索oscar把相关的注释掉。然后到package.xml做同样的操作,再编译就可以了。

我是解决了这两个错误后,就可以编译打包通过了。打包好的文件在

{项目目录}/core/target/datax

我的目录下包含如下几个文件:

  • bin
  • conf
  • job
  • lib
  • script
  • tmp

运行

生产模式

有两种运行方式,线上一般会通过执行datax.py进行datax任务的启动。

进入上面打包好的bin目录,执行作业

$ python datax.py job/{YOUR_JOB.json}

json文件就是我们定义的任务模版,里面描述了数据库的类型(reader和writer),数据库地址等信息。比如一个mysql2mysql的json大概是这样的:

{"job":{"content":[{"reader":{"name":"mysqlreader","parameter":{"column":["id","name"],"connection":[{"jdbcUrl":["jdbc:mysql://127.0.0.1:3306/dq"],"table":["table1"]}],"password":"123456","username":"root"}},"writer":{"name":"mysqlwriter","parameter":{"column":["id","name"],"connection":[{"jdbcUrl":"jdbc:mysql://ip地址:端口/test","table":["table2"]}],"password":"123456","username":"root"}}}],"setting":{"speed":{"channel":"1"}}}
}

接着来看下datax.py是干啥的,它源码不长,main方法是入口,如下:

if __name__ == "__main__":printCopyright()parser = getOptionParser()options, args = parser.parse_args(sys.argv[1:])if options.reader is not None and options.writer is not None:generateJobConfigTemplate(options.reader,options.writer)sys.exit(RET_STATE['OK'])if len(args) != 1:parser.print_help()sys.exit(RET_STATE['FAIL'])startCommand = buildStartCommand(options, args)# print startCommandchild_process = subprocess.Popen(startCommand, shell=True)register_signal()(stdout, stderr) = child_process.communicate()sys.exit(child_process.returncode)

流程概括如下:

  • 打印datax版权信息
  • 获取参数解析器解析参数
  • 构建启动命令
  • 启动java子进程

后面会有专门的文章详细分析这个datax.py,这里不多说。

如果你打包好直接运行

$ python datax.py job/{YOUR_JOB.json}

会报错如下:

WARN  ConfigParser - 插件[mysqlreader,mysqlwriter]加载失败,1s后重试... Exception:Code:[Framework-12], Description:[DataX插件初始化错误, 该问题通常是由于DataX安装错误引起,请联系您的运维解决 .].  - 插件加载失败,未完成指定插件加载:[mysqlwriter, mysqlreader]
2021-06-22 14:41:28.120 [main] ERROR Engine - 经DataX智能分析,该任务最可能的错误原因是:
com.alibaba.datax.common.exception.DataXException: Code:[Framework-12], Description:[DataX插件初始化错误, 该问题通常是由于DataX安装错误引起,请联系您的运维解决 .].  - 插件加载失败,未完成指定插件加载:[mysqlwriter, mysqlreader]at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:26)at com.alibaba.datax.core.util.ConfigParser.parsePluginConfig(ConfigParser.java:142)at com.alibaba.datax.core.util.ConfigParser.parse(ConfigParser.java:63)at com.alibaba.datax.core.Engine.entry(Engine.java:137)at com.alibaba.datax.core.Engine.main(Engine.java:204)

因为我打好包的这个目录下没有plugin目录,datax没法加载插件。参考项目目录下的dataxPluginDev.md文件建目录,然后拷贝对应插件目录下编译好的jar包等文件即可。

mac下有可能还会遇到下面这个错误,

WARN  ConfigParser - 插件[mysqlreader,mysqlwriter]加载失败,1s后重试... Exception:Code:[Common-00], Describe:[您提供的配置文件存在错误信息,请检查您的作业配置 .] - 配置信息错误,您提供的配置文件[/Users/malu/Documents/code/idea_study/DataX/core/target/datax/plugin/reader/.DS_Store/plugin.json]不存在. 请检查您的配置文件.
2021-06-22 16:30:20.825 [main] ERROR Engine -

这个删除对应目录下的.DS_Store文件即可。

运行之后,如果出现类似下面这种,就是成功过了。

debug模式

还有一种是debug调试,看源码用这种模式运行再好不过了。这个配置也比较简单,只需要在idea里配置vm options和运行参数即可。

vm options填写示例(换成自己的目录):

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/Users/malu/Documents/code/idea_study/DataX/core/target/datax/log
-Ddatax.home=/Users/malu/Documents/code/idea_study/DataX/core/target/datax
-Dlogback.configurationFile=/Users/malu/Documents/code/idea_study/DataX/core/target/datax/conf/logback.xml

program args 填写示例(换成自己的目录):

-mode standalone -jobid -1 -job /Users/malu/Documents/code/idea_study/DataX/core/target/datax/job/mysql2mysql.json

datax源码环境搭建相关推荐

  1. spring boot 源码_SpringBoot2.1.x源码环境搭建详解

    前言 笔者试着从GitHub上拉取SpringBoot源码.然鹅,在本地IDEA打开后,爆各种编译错误,各种问题.经过反复操作,现在总结一下SpringBoot源码环境搭建的实践,便于后期对于源码的学 ...

  2. zookeeper3.5.4源码环境搭建

    zookeeper3.5.4源码环境搭建 1. 准备工作 渠道 地址 网盘 zk源码下载地址 提取码:5555 注意:因为zookeeper是由ant来构建的,所以需要使用ant命令来转换成工程,然后 ...

  3. Android源码环境搭建(aosp Ubuntu 16.04)

    Android源码环境搭建(aosp Ubuntu 16.04) FrameWork入门课视频链接:https://edu.csdn.net/course/detail/30298 FrameWork ...

  4. Kafka源码环境搭建

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  5. ZooKeeper源码阅读心得分享+源码基本结构+源码环境搭建

    首发CSDN:徐同学呀,原创不易,转载请注明源链接.我是徐同学,用心输出高质量文章,希望对你有所帮助. 一.心得分享 如何阅读ZooKeeper源码?从哪里开始阅读?最近把ZooKeeper源码看了个 ...

  6. win10环境下的spark2.4源码环境搭建

    spark2.4源码环境搭建 1.概述 2.版本信息及环境 3.基础环境准备 4.源码准备 5.IDEA设置 5.1 IDEA内maven插件设置与更新 5.2 IDEA内导入spark各个模块 6. ...

  7. kafka项目启动_Kafka 探险 源码环境搭建

    这个 Kafka 的专题,我会从系统整体架构,设计到代码落地.和大家一起杠源码,学技巧,涨知识.希望大家持续关注一起见证成长! 我相信:技术的道路,十年如一日!十年磨一剑! 前言 在阅读源码之前,首先 ...

  8. LAMMP源码环境搭建

    一.LAMMP环境简介 LAMMP是linux.Apache.Mysql.Memcahed.PHP的首字母缩写 LAMMP网络拓扑图(待补) 工作模式: apache响应回复用户html请求并转发ph ...

  9. Spring源码阅读 源码环境搭建(一)

    ring 源码阅读的搭建(一) 一 下载spring源码 进入官方网页:https://spring.io/projects/spring-framework 进入相关的github位置,下载zip包 ...

最新文章

  1. SSL/TLS中间人攻击
  2. 开始阅读 深入理解计算机系统
  3. BugKuCTF WEB 点击一百万次
  4. python权限不够无法写入_解决python使用pip安装模块的权限问题
  5. 各种Java实现的常用排序算法
  6. 的训练过程_指外翻的人在训练的过程中,要不要拉伸收肌?
  7. Flutter实现倒计时功能
  8. C语言中指针和数组的区别
  9. gis属性表怎么导成excel_将Excel数据导入到ArcGIS属性表
  10. Win10微软帐户切换不回Administrator本地帐户的解决方法【亲测】
  11. int 转 const char*
  12. Prometheus 监控linux服务器
  13. ember.js 101 入门教程 第一课
  14. 智慧办公室空间管理系统方案优点
  15. Makefile往工程文件.prj传参(或者其他文件)
  16. 小程序switch大小怎么改
  17. 经典Bug永流传---每周一“虫”(二十一)
  18. vue项目中,使用require动态加载本地图片报错找不到模块
  19. Excel VBA 中有关使用 UBound + CurrentRegion 提示类型不匹配的问题及解决方案
  20. Microsoft Excel 教程:如何在 Excel 中使用 COUNTIF 函数?

热门文章

  1. QTableWidget加载大量数据不卡顿
  2. JS通过浏览器调用摄像头,基于windows操作系统。
  3. Docker内运行ROS(melodic版本)以及使用Rviz
  4. 【网络安全】价值上万的机构培训教程,对标大厂岗位要求,学完直接就业
  5. 人工智能AI工具汇总(AIGC ChatGPT时代个体崛起)
  6. Vue Cli2安装及配置
  7. FIR 滤波器四种结构形式的MATLAB 实现
  8. Java操作pdf文件与Base64编码相互转换与文件流操作
  9. 股权转让项目:昆明市粮油贸易中心有限责任公司13.56497%股权转让
  10. c++中的引用,默认参数,占位参数