记录:370
场景:在CentOS 7.9操作系统上,使用apache-maven-3.8.7安装编译DataX源码。在Windows上操作系统上,使用apache-maven-3.8.7编译DataX源码。
版本:
JDK 1.8
Python 2.7.5
开源地址:https://github.com/alibaba/DataX
一、在Linux上编译DataX源码
1.配置Maven环境
参考博文:在Linux上安装Maven和配置Maven仓库(v3.8.7)
博文链接:https://blog.csdn.net/zhangbeizhen18/article/details/128876671
(1)Maven安装路径
路径:/opt/apache-maven-3.8.7
(2)配置Maven的远程镜像仓库
修改文件:vi /opt/apache-maven-3.8.7/conf/settings.xml
修改内容:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
解析:在<mirrors></mirrors>标签内添加以上内容。
(3)配置Maven的本地镜像仓库
修改文件:vi /opt/apache-maven-3.8.7/conf/settings.xml
修改内容:
<localRepository>/opt/maven-repo-3.8.7/repository</localRepository>
解析:在</ettings></settings>标签内添加以上内容。
(4)创建本地镜像仓库目录
命令:mkdir -p /opt/maven-repo-3.8.7/repository
解析:repository中存放从远程仓库下载到本地的jar包等信息。
(5)把settings.xml配置文件拷贝到本地镜像仓库目录下
命令:cp /opt/apache-maven-3.8.7/conf/settings.xml /opt/maven-repo-3.8.7/settings.xml
(6)配置环境变量
修改文件:修改文件:vi /etc/profile
新增内容:
export MAVEN_HOME=/opt/apache-maven-3.8.7
export PATH=$PATH:$MAVEN_HOME/bin
(7)环境变量生效
命令:source /etc/profile
2.配置Maven环境
下载发布版本datax_v202210。
下载命令:wget https://github.com/alibaba/DataX/archive/refs/tags/datax_v202210.tar.gz
3解压源码
把源码包解压到指定目录。
解压命令:tar -zvxf /home/apps/dx/package/datax_v202210.tar.gz -C /home/apps/dx/
重命名:mv DataX-datax_v202210/ DataX
解析:解压源码包后名称是DataX-datax_v202210,重命名为DataX。
4使用Maven打包
4.1使用Maven打包
操作目录:cd /home/apps/dx/DataX/
打包命令:mvn -U clean package assembly:assembly -Dmaven.test.skip=true
解析:在../DataX/目录下执行打包,原因是pom.xml和package.xml在这个目录下。
4.2解决缺少的依赖包
从官方已编译的版本中获取jar包,然后把jar包生成到本地Maven仓库。
下载地址:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202210/datax.tar.gz
(1)把pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar生成到Maven仓库
命令:mvn install:install-file -DgroupId=org.pentaho -DartifactId=pentaho-aggdesigner-algorithm -Dversion=5.1.5-jhyde -Dpackaging=jar -Dfile=/home/apps/localJar/pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar
(2)把eigenbase-properties-1.1.4.jar生成到Maven仓库
命令:mvn install:install-file -DgroupId=eigenbase -DartifactId=eigenbase-properties -Dversion=1.1.4 -Dpackaging=jar -Dfile=/home/apps/localJar/eigenbase-properties-1.1.4.jar
5打包成功后的DataX包
打包完成目标目录:/home/apps/dx/DataX/target/datax.tar.gz
可用包目录:/home/apps/dx/DataX/target/datax/datax/bin
6脚本执行
6.1参考脚本来源
方式一,源码目录:../DataX/mysqlreader/doc/mysqlreader.md
方式二,执行命令:python datax.py -w mysqlwriter -r mysqlreader
6.2执行脚本
操作目录:/home/apps/dx/DataX/target/datax/datax/bin
执行脚本:python datax.py ../job/drds2mysql.json
6.3本例脚本
本例脚本是从drds数据库同步数据到mysql数据库。
{
"job": {
"setting": {
"speed": {
"byte": 1048576
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "drdsreader",
"parameter": {
"username": "hub01",
"password": "******",
"column": [
"ID","CITY_NAME","LAND_AREA","POPULATION","GROSS","CITY_DESCRIBE","DATA_YEAR","UPDATE_TIME"
],
"connection": [
{
"table": [
"t_city_01"
],
"jdbcUrl": [
"jdbc:mysql://******:3306/hub01db"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "hub02",
"password": "******",
"column": [
"ID","CITY_NAME","LAND_AREA","POPULATION","GROSS","CITY_DESCRIBE","DATA_YEAR","UPDATE_TIME"
],
"session": [
"set session sql_mode='ANSI'"
],
"preSql": [
"delete from t_city_02"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://******:3306/hub02db?useSSL=false",
"table": [
"t_city_02"
]
}
]
}
}
}
]
}
}
二、在Windows上编译DataX源码
1.配置Maven环境
(1)安装目录
目录:E:\dev
(2)配置Maven的远程镜像仓库
修改文件:E:\dev\apache-maven-3.8.7\conf\settings.xml
修改内容:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
解析:在<mirrors></mirrors>标签内添加以上内容。
(3)配置Maven的本地镜像仓库
修改文件:E:\dev\apache-maven-3.8.7\conf\settings.xml
修改内容:
<localRepository>E:\dev\maven-repo-3.8.7\repository</localRepository>
解析:在</ettings></settings>标签内添加以上内容。
(4)创建本地镜像仓库目录
创建E:\dev\maven-repo-3.8.7\repository目录。
解析:repository中存放从远程仓库下载到本地的jar包等信息。
(5)把settings.xml配置文件拷贝到本地镜像仓库目录下
把E:\dev\apache-maven-3.8.7\conf\settings.xml文件拷贝到E:\dev\maven-repo-3.8.7\settings.xml
(6)配置环境变量
依次点击和选择:此电脑->属性->高级系统设置->环境变量
在系统变量编辑框修改配置。
<1>新建系统变量
变量名称:MAVEN_HOME
变量值:E:\dev\maven-repo-3.8.7
<2>编辑系统变量Path
编辑系统变量Path,并添加行配置。
变量名称:Path
变量值:%MAVEN_HOME%\bin
2下载源码
下载发布版本datax_v202210。
源码地址:https://github.com/alibaba/DataX
(1)浏览器直接下载
地址:https://github.com/alibaba/DataX/archive/refs/tags/datax_v202210.tar.gz
解析:直接在浏览器中输入地址就能下载。
(2)使用Git下载
命令:git clone git@github.com:alibaba/DataX.git
3解压源码
源码解压目录:E:\dev\DataX
4使用Maven打包
4.1使用Maven打包
操作目录:E:\dev\DataX
打包命令:mvn -U clean package assembly:assembly -Dmaven.test.skip=true
解析:在../DataX/目录下执行打包,原因是pom.xml和package.xml在这个目录下。
4.2解决缺少的依赖包
从官方已编译的版本中获取jar包,然后把jar包生成到本地Maven仓库。
下载地址:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202210/datax.tar.gz
(1)把pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar生成到Maven仓库
命令:mvn install:install-file -DgroupId=org.pentaho -DartifactId=pentaho-aggdesigner-algorithm -Dversion=5.1.5-jhyde -Dpackaging=jar -Dfile=D:/dev/localJar/pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar
(2)把eigenbase-properties-1.1.4.jar生成到Maven仓库
命令:mvn install:install-file -DgroupId=eigenbase -DartifactId=eigenbase-properties -Dversion=1.1.4 -Dpackaging=jar -Dfile=D:/dev/localJar/eigenbase-properties-1.1.4.jar
5打包成功后的DataX包
打包完成目标目录:E:\dev\DataX\target\datax.tar.gz
可用包目录:E:\dev\DataX\target\datax\datax\bin
6脚本执行
6.1参考脚本来源
方式一,源码目录:../DataX/mysqlreader/doc/mysqlreader.md
方式二,执行命令:python datax.py -w mysqlwriter -r mysqlreader
6.2执行脚本
操作目录:E:\dev\DataX\target\datax/datax\bin
执行脚本:python datax.py mysql2mysql.json
6.3本例脚本
本例脚本是两个MySQL数据库之间数据同步,分别是hub01和hub02。
{
"job": {
"setting": {
"speed": {
"byte": 1048576
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "12345678",
"column": [
"ID","CITY_NAME","LAND_AREA","POPULATION","GROSS","CITY_DESCRIBE","DATA_YEAR","UPDATE_TIME"
],
"splitPk": "ID",
"connection": [
{
"table": [
"t_city_01"
],
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/hub01?useSSL=false"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "root",
"password": "12345678",
"column": [
"ID","CITY_NAME","LAND_AREA","POPULATION","GROSS","CITY_DESCRIBE","DATA_YEAR","UPDATE_TIME"
],
"session": [
"set session sql_mode='ANSI'"
],
"preSql": [
"delete from t_city_02"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://127.0.0.1:3306/hub02?useSSL=false",
"table": [
"t_city_02"
]
}
]
}
}
}
]
}
}
三、注意问题
1.在编写好任务脚本时,使用JSON格式化工具,先对脚本格式化一下,检查脚本格式。
2.执行时报错问题
报错信息:
com.alibaba.datax.common.exception.DataXException: Code:[Framework-03], Description:[DataX引擎配置错误,该问题通常是由于DataX安装错误引起,请联系您的运维解决 .]. - 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数
参考解决:
修改core.json配置文件
文件目录:../DataX/core/src/main/conf/core.json
修改内容,依次找到文件内容标签:
core->transport->channel->speed >"byte": -1,
将单个channel的-1改大些,比如2MB或者更大。
core->transport->channel->speed >"byte": 3000000,
四、本例表和数据
1.表结构
CREATE TABLE t_city_01 (
ID BIGINT(16) NOT NULL AUTO_INCREMENT COMMENT '主键',
CITY_NAME VARCHAR(64) COLLATE utf8_bin NOT NULL COMMENT '城市名',
LAND_AREA DOUBLE DEFAULT NULL COMMENT '城市面积',
POPULATION BIGINT(16) DEFAULT NULL COMMENT '城市人口',
GROSS DOUBLE DEFAULT NULL COMMENT '生产总值',
CITY_DESCRIBE VARCHAR(512) COLLATE utf8_bin DEFAULT NULL COMMENT '城市描述',
DATA_YEAR VARCHAR(16) COLLATE utf8_bin DEFAULT NULL COMMENT '数据年份',
UPDATE_TIME DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (ID)
) ENGINE=INNODB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='城市信息表';
CREATE TABLE t_city_02 (
ID BIGINT(16) NOT NULL AUTO_INCREMENT COMMENT '主键',
CITY_NAME VARCHAR(64) COLLATE utf8_bin NOT NULL COMMENT '城市名',
LAND_AREA DOUBLE DEFAULT NULL COMMENT '城市面积',
POPULATION BIGINT(16) DEFAULT NULL COMMENT '城市人口',
GROSS DOUBLE DEFAULT NULL COMMENT '生产总值',
CITY_DESCRIBE VARCHAR(512) COLLATE utf8_bin DEFAULT NULL COMMENT '城市描述',
DATA_YEAR VARCHAR(16) COLLATE utf8_bin DEFAULT NULL COMMENT '数据年份',
UPDATE_TIME DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (ID)
) ENGINE=INNODB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='城市信息表';
2.插入数据
INSERT INTO t_city_01 (
ID,CITY_NAME,LAND_AREA,POPULATION,
GROSS,CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME)
VALUES
('1','杭州','16850','1200','1.62','杭州是一个好城市','2020','2023-2-6 23:03:50'),
('2','杭州','16850','1200','1.82','杭州是一个好城市','2021','2023-2-6 23:03:50'),
('3','杭州','16850','1200','1.88','杭州是一个好城市','2021','2023-2-6 23:03:50');
以上,感谢。
2023年2月6日