在Linux和Windows上编译DataX源码

记录: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日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值