【数据库开发】DataX开发环境的安装部署(Python、Java)

文章目录

  • 1、简介
    • [1.1 DataX简介](#1.1 DataX简介)
    • [1.2 DataX功能](#1.2 DataX功能)
    • [1.3 支持的数据通道](#1.3 支持的数据通道)
  • 2、DataX安装配置
    • [2.1 DataX](#2.1 DataX)
    • [2.2 Java](#2.2 Java)
    • [2.3 Python](#2.3 Python)
  • [3、DataX Web安装配置](#3、DataX Web安装配置)
    • [3.1 mysql](#3.1 mysql)
    • [3.2 DataX Web](#3.2 DataX Web)
      • [3.2.1 简介](#3.2.1 简介)
      • [3.2.2 架构图](#3.2.2 架构图)
      • [3.2.3 依赖环境](#3.2.3 依赖环境)
      • [3.2.4 安装](#3.2.4 安装)
  • 4、入门使用
    • [4.1 DataX自带打印示例测试](#4.1 DataX自带打印示例测试)
    • [4.2 DataX生成任务模板文件](#4.2 DataX生成任务模板文件)
    • [4.3 DataX-Web创建任务](#4.3 DataX-Web创建任务)
  • 5、FAQ
    • [5.1 DataX-Web连接不上MySQL](#5.1 DataX-Web连接不上MySQL)
    • [5.2 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数?](#5.2 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数?)
    • [5.3 触发任务报错Cannot run program "python": error=2, No such file or directory](#5.3 触发任务报错Cannot run program "python": error=2, No such file or directory)
    • [5.4 基于代码重新打包DataX](#5.4 基于代码重新打包DataX)
  • 结语

1、简介

DataX是阿里云DataWorks数据集成的开源版本。下载即可用,支持linux和windows,只需要短短几步骤就可以完成数据的传输。

官网地址:
https://github.com/alibaba/DataX

1.1 DataX简介

DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。

1.2 DataX功能

DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

1.3 支持的数据通道

DataX目前支持数据如下:

类型 数据源 Reader(读) Writer(写) 文档
RDBMS 关系型数据库 MySQL
Oracle
OceanBase
SQLServer
PostgreSQL
DRDS
Kingbase
通用RDBMS(支持所有关系型数据库)
阿里云数仓数据存储 ODPS
ADB
ADS
OSS
OCS
Hologres
AnalyticDB For PostgreSQL
阿里云中间件 datahub 读 、写
SLS 读 、写
图数据库 阿里云 GDB
Neo4j
NoSQL数据存储 OTS
Hbase0.94
Hbase1.1
Phoenix4.x
Phoenix5.x
MongoDB
Cassandra
数仓数据存储 StarRocks 读 、
ApacheDoris
ClickHouse
Databend
Hive
kudu
selectdb
无结构化数据存储 TxtFile
FTP
HDFS
Elasticsearch
时间序列数据库 OpenTSDB
TSDB
TDengine

2、DataX安装配置

https://github.com/alibaba/DataX/blob/master/userGuid.md

2.1 DataX

  • 下载DataX的源代码进行编译
bash 复制代码
wget https://codeload.github.com/alibaba/DataX/zip/master
git clone git@github.com:alibaba/DataX.git

或者

  • 下载DataX的二进制安装包(本文采用的方法)
bash 复制代码
# wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz

解压如下:

bash 复制代码
tar -zxvf datax.tar.gz

查看文件夹/home/tomcat如下:

查看文件夹/home/tomcat/datax/bin如下:

查看文件夹/home/tomcat/datax/job如下:

2.2 Java

输入命令检查java是否已安装。

bash 复制代码
java -version

说明java没有安装。

安装java环境,输入如下代码如下:

bash 复制代码
apt-get install openjdk-11-jre-headless openjdk-11-jdk-headless


2.3 Python

输入命令检查python是否已安装。

bash 复制代码
python -v
bash 复制代码
python3 -v

3、DataX Web安装配置

3.1 mysql

下载mysql数据库的安装包:

bash 复制代码
mkdir mysql
cd mysql
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.31-1ubuntu18.04_amd64.deb-bundle.tar

解压mysql数据库的安装包:

bash 复制代码
tar xvf mysql-server_5.7.31-1ubuntu18.04_amd64.deb-bundle.tar

依次安装如下文件:

bash 复制代码
 libmysqlclient20_5.7.31-1ubuntu18.04_amd64.deb
 libmysqlclient-dev_5.7.31-1ubuntu18.04_amd64.deb
 libmysqld-dev_5.7.31-1ubuntu18.04_amd64.deb
 mysql-client_5.7.31-1ubuntu18.04_amd64.deb
 mysql-common_5.7.31-1ubuntu18.04_amd64.deb
 mysql-community-client_5.7.31-1ubuntu18.04_amd64.deb
 mysql-community-server_5.7.31-1ubuntu18.04_amd64.deb
 mysql-community-source_5.7.31-1ubuntu18.04_amd64.deb
 mysql-server_5.7.31-1ubuntu18.04_amd64.deb
 #mysql-testsuite_5.7.31-1ubuntu18.04_amd64.deb
 #mysql-community-test_5.7.31-1ubuntu18.04_amd64.deb

比如命令如下:

bash 复制代码
sudo apt-get install ./mysql-server_5.7.31-1ubuntu18.04_amd64.deb

测试是否安装成功如下:

bash 复制代码
mysql -V

安装完成后查看mysql服务:

bash 复制代码
netstat -tap | grep mysql

修改 root 密码和 host:

bash 复制代码
mysql
use mysql
update user set host = '%' where user = 'root' 
SET PASSWORD FOR 'root'@'%' = PASSWORD('XXXXXXXX');
FLUSH PRIVILEGES;
select user,host from user;
FLUSH PRIVILEGES;

测试mysql是否能登录成功。

查看mysql数据库情况:

bash 复制代码
show databases;
bash 复制代码
use dataweb;
show tables;

执行如下操作,使得远程可以连接mysql数据库。

bash 复制代码
# 查看监听
netstat -an |grep 3306
# 前监听的是本地回环地址:tcp 0 0 127.0.0.1:3306  0.0.0.0:* LISTEN 
# 远程客户端无法访问

# 修改MySQL的本地监听地址
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

修改bind-address 的值为 bind-address = 0.0.0.0保存退出。
也可以修改为本机ip,例如:bind-address = 192.168.111.10

# 重启mysql数据库
sudo service mysql restart

# 在远程客户端机器上测试下网络,telnet成功说明网络没问题
telnet 192.168.111.10 3306

# 注意:阿里云服务器有端口限制,需要去配置下端口访问规则开放3306端口
网址:[https://homenew.console.aliyun.com/](https://homenew.console.aliyun.com/)

数据库的基本操作命令:

bash 复制代码
# 直接登陆mysql
mysql -u用户名 -p密码 数据库名
# 例如: 
mysql -uroot -p123456 mysql

# 先登陆后面再输入密码和选择数据库
mysql -u root -p
Enter password:  "root用户密码"
mysql> use mysql # 选择要操作的数据库

# 切换数据库
use 数据库名;

# 查看所有数据库
show databases;  

# 查看登陆数据库中所有的表
show tables;  

# 查看数据表结构
desc 表名;

# 查看登陆用户名 
select user();  

# 查看登陆数据库库名
select database();

# 查看版本
select version();

# 显示当前时间
select now();

# 查看所有用户的 用户名、可登陆主机、身份验证插件、密码  
select user,host,plugin,authentication_string from user;

# 查看当前登录用户权限
show grants;

# 查看任意用户权限(后面说权限的具体含义)
show grants for root@localhost;

数据库的备份及恢复:

bash 复制代码
# 备份所有数据库:
mysqldump -uroot -p --all-databases > all.db

# 备份指定数据库:
mysqldump -uroot -p pydb > test1.db

# 备份指定数据库的某些表
mysqldump -uroot -p pydb 表名1 表名2 表名n > test2.db

# 备份指定数据库排除某些表(排除表1 和 表2)
mysqldump -uroot -p pydb --ignore-table=pydb.表1 --ignore-table=pydb.表2 > test3.db

# 创建test数据库
create database test charset=utf8; 

# 恢复备份数据,导入的数据库必须存在
mysql -u root -p test < test1.db

卸载mysql:

bash 复制代码
# 卸载mysql:
1.sudo apt-get autoremove mysql* --purge
2.sudo apt-get remove mysql-server
3.sudo apt-get remove mysql-common

# 清理残留数据 
sudo dpkg -l |grep mysql|awk '{print $2}' |sudo xargs dpkg -P 
sudo rm -rf /etc/mysql/ 
sudo rm -rf /var/lib/mysql

# 检查是否删除完毕
whereis mysql
sudo find / -name mysql

3.2 DataX Web

https://github.com/WeiYe-Jing/datax-web

3.2.1 简介

DataX集成可视化页面,选择数据源即可一键生成数据同步任务,支持RDBMS、Hive、HBase、ClickHouse、MongoDB等数据源,批量创建RDBMS数据同步任务,集成开源调度系统,支持分布式、增量同步数据、实时查看运行日志、监控执行器资源、KILL运行进程、数据源信息加密等。

3.2.2 架构图

3.2.3 依赖环境

  • Language: Java 8(jdk版本建议1.8.201以上)
  • Python2.7(支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下)
  • Environment: MacOS, Windows,Linux
  • Database: Mysql5.7

3.2.4 安装

https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md

bash 复制代码
https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg
提取码:cpsk
  • 1)解压安装包
    在选定的安装目录,解压安装包
bash 复制代码
tar -zxvf datax-web-{VERSION}.tar.gz
  • 2)执行一键安装脚本
    进入解压后的目录,找到bin目录下面的install.sh文件,如果选择交互式的安装,则直接执行
bash 复制代码
./bin/install.sh
  • 3)数据库初始化
    如果你的服务上安装有mysql命令,在执行安装脚本的过程中则会出现以下提醒:
bash 复制代码
Scan out mysql command, so begin to initalize the database
Do you want to initalize database with sql: [{INSTALL_PATH}/bin/db/datax-web.sql]? (Y/N)y
Please input the db host(default: 127.0.0.1): 
Please input the db port(default: 3306): 
Please input the db username(default: root): 
Please input the db password(default: ): 
Please input the db name(default: exchangis)
    1. 配置
      在项目目录下/modules/datax-execute/bin/env.properties 指定PYTHON_PATH的路径
bash 复制代码
vi ./modules/{module_name}/bin/env.properties

### 执行datax的python脚本地址
PYTHON_PATH=

### 保持和datax-admin服务的端口一致;默认是9527,如果没改datax-admin的端口,可以忽略
DATAX_ADMIN_PORT=

此文件中包括一些默认配置参数,例如:executor.port,json.path,data.path等,具体请查看文件。

检查文件bootstrap.properties:

bash 复制代码
cd ./datax-web
vi ./modules/datax-admin/conf/bootstrap.properties

datax-web-server分为2模块:admin 、executor。

检查admin配置修改:

bash 复制代码
cd ./datax-web
sudo vi ./modules/datax-admin/bin/env.properties
# 修改server port、邮件、java_home等信息

检查executor 配置修改:

bash 复制代码
cd ./datax-web
sudo vi ./modules/datax-executor/bin/env.properties
bash 复制代码
./bin/start-all.sh

一键取消所有服务

bash 复制代码
./bin/stop-all.sh

汇总命令如下:

bash 复制代码
./bin/start-all.sh # 启动
./bin/stop-all.sh # 停止
 
# 启动后jps,可以看到admin和executor进程
jps
  • 6)查看服务

    在Linux环境下使用JPS命令,查看是否出现DataXAdminApplication和DataXExecutorApplication进程,如果存在这表示项目运行成功;

    如果项目启动失败,请检查启动日志:modules/datax-admin/bin/console.out或者modules/datax-executor/bin/console.out;

  • 7)运行

    部署完成后,在浏览器中输入 http://ip:port/index.html 就可以访问对应的主界面(ip为datax-admin部署所在服务器ip,port为为datax-admin 指定的运行端口);

bash 复制代码
http://192.168.1.123:9527/index.html

输入用户名 admin 密码 123456 就可以直接访问系统;

4、入门使用

4.1 DataX自带打印示例测试

输入DataX的测试命令如下:

bash 复制代码
python3 datax.py ../job/job.json

命令行结果输出:

初步测试成功。

4.2 DataX生成任务模板文件

通过命令生成datax任务的模板json文件。

bash 复制代码
cd  ./datax/bin/
python datax.py -r mysqlreader -w mysqlwriter > mysql2mysql.json

查看文件mysql2mysql.json如下:

bash 复制代码
cat mysql2mysql.json

准备数据表如下:

t_user:

t_user2:

根据各自需求,按照模板修改文件mysql2mysql.json:

c 复制代码
{
   "job": {
       "content": [
            {
               "reader": {
                   "name":"mysqlreader",
                   "parameter": {
                       "column": ["user_id"],
                       "connection": [
                            {
                               "jdbcUrl": ["jdbc:mysql://192.168.36.130:3306/test?useSSL=false"],
                               "table": ["t_user"]
                            }
                        ],
                       "password":"123456",
                       "username":"root"
                    }
                },
               "writer": {
                   "name":"mysqlwriter",
                   "parameter": {
                       "column": ["user_id"],
                       "connection": [
                            {
                               "jdbcUrl":"jdbc:mysql://192.168.36.130:3306/test?useSSL=false",
                               "table": ["t_user2"]
                            }
                        ],
                       "password":"123456",
                       "username":"root",
                       "writeMode":"insert"
                    }
                }
            }
        ],
       "setting": {
           "speed": {
               "channel":"1"
            }
        }
    }
}

①select中字段个数和writer节点上"column"的个数需保持一致,如果能确保 select中的字段与目标表保持一致,可在writer节点的配置上去掉"column"相关配置。
②writer节点的jdbcUrl,不可以同reader节点那样用"[]"括起来。

启动datax同步任务:

bash 复制代码
python ./datax.py ./mysql2mysql.json


修改mysql2mysql.json中的字段数据如下:

bash 复制代码
"column": ["user_id", "name"],

再次执行命令如下:

bash 复制代码
python ./datax.py ./mysql2mysql.json

数据表结果更新如下:

4.3 DataX-Web创建任务

  • 创建项目

  • 创建执行器

  • 创建数据源

  • 创建任务模板

    此步骤是主要是为了后边构建任务的时候,为任务指定执行器。

  • 创建任务

  • 生成任务json文件

  • 管理任务,执行任务

  • 查看日志

5、FAQ

5.1 DataX-Web连接不上MySQL

  • 问题:
    Code:[MYSQLErrCode-02], Description:[数据库服务的IP地址或者Port错误,请检查填写的IP地址和Port或者联系DBA确认IP地址和Port是否正确。如果是同步中心用户请联系DBA确认idb上录入的IP和PORT信息和数据库的当前实际信息是一致的]. - 具体错误信息为:com.mysql.jdbc.excep

  • 回答:
    不建议在没有服务器身份验证的情况下建立SSL连接,根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果没有设置显式选项,则必须默认建立SSL连接。为了符合不使用SSL的现有应用程序,verifyServerCertificate属性被设置为"false"。您需要通过设置useSSL=false显式禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任存储。

很简单,在连接数据库的url后面加上参数即可,例如:

bash 复制代码
jdbc:mysql://localhost:3306/testdb?useSSL=false

使用上述标红的URL,即可解决该警告,标红参数前面为你数据库连接URL,如果有多个参数记得用&连接,例如:

bash 复制代码
jdbc:mysql://localhost:3306/testdb?characterEncoding=utf-8&useSSL=false

5.2 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数?

解决办法:

修改文件datax/conf/core.json:

bash 复制代码
"core": {
        "dataXServer": {
            "address": "http://localhost:7001/api",
            "timeout": 10000,
            "reportDataxLog": false,
            "reportPerfLog": false
        },
        "transport": {
            "channel": {
                "class": "com.alibaba.datax.core.transport.channel.memory.MemoryChannel",
                "speed": {
                    "byte": 2000000,
                    "record": -1
                },
                "flowControlInterval": 20,
                "capacity": 512,
                "byteCapacity": 67108864
            },
            "exchanger": {
                "class": "com.alibaba.datax.core.plugin.BufferedRecordExchanger",
                "bufferSize": 32
            }
        },
}

修改core -> transport -> channel -> speed -> "byte": 2000000,将单个channel的大小改为2MB即可。

5.3 触发任务报错Cannot run program "python": error=2, No such file or directory

解决办法:

因为Ubuntu自带的python没有/usr/bin/python该目录,data-web源码中默认调用/usr/bin/python,解决方法可以搭建软连接

bash 复制代码
ln -s /usr/bin/python3 /usr/bin/python

或者若安装了python2也可以

bash 复制代码
ln -s /usr/bin/python2 /usr/bin/python

5.4 基于代码重新打包DataX

datax和datax web可以使用maven进行编译源码和打包,因此需要先安装maven。

在Linux系统中,可以使用以下命令安装maven:

bash 复制代码
sudo apt-get install maven
bash 复制代码
mvn -v

进入datax源代码目录,执行以下命令进行编译:

bash 复制代码
mvn clean package assembly:assembly -Dmaven.test.skip=true 

其中,-Dmaven.test.skip=true表示跳过测试。
(1)找不到依赖包:
[ERROR] Failed to execute goal on project hdfsreader: Could not resolve dependencies for project com.alibaba.datax:hdfsreader:jar:0.0.1-SNAPSHOT: Could not find artifact org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde in nexus-aliyun (https://maven.aliyun.com/repository/central) -> [Help 1]

解决方法:从提示上看,是hdfsreader的包缺失,相应的hdfswriter也应该是不行的。因为我用不到这两个组件,于是在pom.xml中注释掉。

(2)问题:提示disk空间too little,实际空间有很大?
解决方法:实际是/tmp目录小于默认的1G,设置小一点就好了。配置文件minimalTmpDirGB设置小一点就正常了。
logdir datadir tmpdir 都有自己的min value,在/etc/taos/taos.cfg指定。
然后重启一下涛思服务。

bash 复制代码
启动服务进程: systemctl start taosd
停止服务进程: systemctl stop taosd
重启服务进程: systemctl restart taosd
查看服务状态: systemctl status taosd

编译完成后,会在target目录下生成datax.tar.gz文件。

将datax.tar.gz文件解压到任意目录,例如/home/datax:

bash 复制代码
tar -zxvf datax.tar.gz -C /home/

进入datax目录,编辑job目录下的job.json文件,配置datax的运行参数。

安装maven并切换阿里镜像源。不然编译的时候会找不到第三方依赖项。

修改为国内阿里镜像源,找到/usr/share/maven/conf/settings.xml文件,打开并修改以下:

xml 复制代码
<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

settings.xml文件可能会显示只读。需要修改下权限再保存它。

bash 复制代码
sudo chmod 777 /usr/share/maven/conf/settings.xml

打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ 。

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

相关推荐
coberup6 分钟前
django Forbidden (403)错误解决方法
python·django·403错误
逊嘘13 分钟前
【Java语言】抽象类与接口
java·开发语言·jvm
morris13120 分钟前
【SpringBoot】Xss的常见攻击方式与防御手段
java·spring boot·xss·csp
十叶知秋33 分钟前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
龙哥说跨境37 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
七星静香1 小时前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员1 小时前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU1 小时前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie61 小时前
在IDEA中使用Git
java·git
小白学大数据1 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin