Linux中DataX使用第二期
简介
紧接着上期关于DataX工具的基础使用,本期来看看DataX的源码部分。因为源码内容比较多,于是会用几期进行理解,目的是为了更好的了解Datax。
环境
- Windows10 (linux中命令相似,为了方面调试就用windows的)
- JDK(1.8以上,推荐1.8)
- Python(2或3都可以)
- Apache Maven (推荐3.x版本)
- IntelliJ IDEA 2023.2.2 (IDE没要求,能打开maven项目就行)
- 源码下载地址
源码打包
源码下载完成后,解压然后用IDEA打开。
下载maven包
下载完成后进行打包,进入项目的更目录。
输入cmd按回车键
输入打包命令,等待打包完成即可。(打包使用了Assembly 插件,主要作用是,允许用户将项目输出与它的依赖项、模块、站点文档、和其他文件一起组装成一个可分发的归档文件。简单来说就是定制化打包,和 Inno Setup有点相似)
mvn -U clean package assembly:assembly -Dmaven.test.skip=true
打包后的文件(有压缩包和解压后的文件夹两种,在windows和linux中都能使用。)
进入执行脚本文件夹内,在这文件内进入cmd。
查看打包的脚步是否可用,执行下面命令。
// 1.windows下
python datax.py -r streamreader -w streamwriter
// 2.linux下
// 第一次执行需要授权
chmod 777 datax.py
// 执行
./datax.py -r streamreader -w streamwriter
测试数据同步,在当前目录下创建stream2stream.json。
{
"job": {
"content": [
{
"reader": {
"name": "streamreader",
"parameter": {
"sliceRecordCount": 8,
"column": [
{
"type": "long",
"value": "10"
},
{
"type": "string",
"value": "hello,你好,世界-DataX"
}
]
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"encoding": "UTF-8",
"print": true
}
}
}
],
"setting": {
"speed": {
"channel": 5
}
}
}
}
说下几个关键的参数
- sliceRecordCount 表示每个切片有多少数据量。
- column 表示数据类型和具体数据。
- print 表示是否打印到控制台。
- channel 表示同步数据用的通道。
执行脚本(执行前改变了下编码格式,防止中文乱码)
// 1.windows下
// 切换成utf-8编码 ,Change Code Page 65001,其中 65001 是UTF-8编码的代码页编号。
chcp 65001
// 执行命令
python datax.py ./stream2stream.json
// 2.liunx下
./datax.py ./stream2stream.json
从“读出记录总数”是40这点,可知道 读出记录总数 = channel*sliceRecordCount,就是5*8=40。
从这个图中taskId有5个,表示channel的数量5。而且打印的顺序也不一致,说明channel相当于进程,开个5个进程来打印数据,每个进程打印8条数据。
开发调试
首先找到源码的datax-example模块。
通过调用这里的测试类,就能做到类似上面执行.py脚本的效果。
比如说,这里通过名称找到读取器的源码位置。
调整下源码
执行测试类,查看打印信息。
当前模块的目的就是方便调试。(下图左边表示正常的调试方式,右边表示有了这个模块的调试流程)
然后“datax-example-core”模块,主要提供一些方便测试的代码,而“datax-example-streamreader”就主要做测试就行了。
最后是“datax-example-neo4j”,这个作为Neo4j(一个高性能的,NOSQL图形数据库)的测试模块,需要docker环境。因为日常工作涉及Neo4比较少,后续再做研究。
总结
本期主要讲了源码的一些基础使用和调试,后续会进一步的深入。这也是年前的最后一篇文章,希望大家新的一年,如蛇般灵活,抓住每一个机遇,如蛇般睿智,化解每一次挑战。新年快乐,大吉大利