文章目录
- 1、简介
- 1.1 DataX简介
- 1.2 DataX功能
- 1.3 支持的数据通道
- 2、DataX安装配置
- 2.1 DataX
- 2.2 Java
- 2.3 Python
- 3、DataX Web安装配置
- 3.1 mysql
- 3.2 DataX Web
- 3.2.1 简介
- 3.2.2 架构图
- 3.2.3 依赖环境
- 3.2.4 安装
- 4、入门使用
- 4.1 DataX自带打印示例测试
- 4.2 DataX生成任务模板文件
- 4.3 DataX-Web创建任务
- 5、FAQ
- 5.1 DataX-Web连接不上MySQL
- 5.2 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数?
- 5.3 触发任务报错Cannot run program "python": error=2, No such file or directory
- 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的源代码进行编译
wget https://codeload.github.com/alibaba/DataX/zip/master
git clone git@github.com:alibaba/DataX.git
或者
- 下载DataX的二进制安装包(本文采用的方法)
# 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
解压如下:
tar -zxvf datax.tar.gz
查看文件夹/home/tomcat如下:
查看文件夹/home/tomcat/datax/bin如下:
查看文件夹/home/tomcat/datax/job如下:
2.2 Java
输入命令检查java是否已安装。
java -version
说明java没有安装。
安装java环境,输入如下代码如下:
apt-get install openjdk-11-jre-headless openjdk-11-jdk-headless
2.3 Python
输入命令检查python是否已安装。
python -v
python3 -v
3、DataX Web安装配置
3.1 mysql
下载mysql数据库的安装包:
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数据库的安装包:
tar xvf mysql-server_5.7.31-1ubuntu18.04_amd64.deb-bundle.tar
依次安装如下文件:
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
比如命令如下:
sudo apt-get install ./mysql-server_5.7.31-1ubuntu18.04_amd64.deb
测试是否安装成功如下:
mysql -V
安装完成后查看mysql服务:
netstat -tap | grep mysql
修改 root 密码和 host:
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数据库情况:
show databases;
use dataweb;
show tables;
执行如下操作,使得远程可以连接mysql数据库。
# 查看监听
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/)
数据库的基本操作命令:
# 直接登陆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;
数据库的备份及恢复:
# 备份所有数据库:
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:
# 卸载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
https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg
提取码:cpsk
- 1)解压安装包
在选定的安装目录,解压安装包
tar -zxvf datax-web-{VERSION}.tar.gz
- 2)执行一键安装脚本
进入解压后的目录,找到bin目录下面的install.sh文件,如果选择交互式的安装,则直接执行
./bin/install.sh
- 3)数据库初始化
如果你的服务上安装有mysql命令,在执行安装脚本的过程中则会出现以下提醒:
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)
-
- 配置
在项目目录下/modules/datax-execute/bin/env.properties 指定PYTHON_PATH的路径
- 配置
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:
cd ./datax-web
vi ./modules/datax-admin/conf/bootstrap.properties
datax-web-server分为2模块:admin 、executor。
检查admin配置修改:
cd ./datax-web
sudo vi ./modules/datax-admin/bin/env.properties
# 修改server port、邮件、java_home等信息
检查executor 配置修改:
cd ./datax-web
sudo vi ./modules/datax-executor/bin/env.properties
- 5)启动服务
运行bin目录下start-all.sh (或者分别启动admin、executor)。
一键启动所有服务
./bin/start-all.sh
一键取消所有服务
./bin/stop-all.sh
汇总命令如下:
./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 指定的运行端口);
http://192.168.1.123:9527/index.html
输入用户名 admin 密码 123456 就可以直接访问系统;
4、入门使用
4.1 DataX自带打印示例测试
输入DataX的测试命令如下:
python3 datax.py ../job/job.json
命令行结果输出:
初步测试成功。
4.2 DataX生成任务模板文件
通过命令生成datax任务的模板json文件。
cd ./datax/bin/
python datax.py -r mysqlreader -w mysqlwriter > mysql2mysql.json
查看文件mysql2mysql.json如下:
cat mysql2mysql.json
准备数据表如下:
t_user:
t_user2:
根据各自需求,按照模板修改文件mysql2mysql.json:
{
"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同步任务:
python ./datax.py ./mysql2mysql.json
修改mysql2mysql.json中的字段数据如下:
"column": ["user_id", "name"],
再次执行命令如下:
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后面加上参数即可,例如:
jdbc:mysql://localhost:3306/testdb?useSSL=false
使用上述标红的URL,即可解决该警告,标红参数前面为你数据库连接URL,如果有多个参数记得用&连接,例如:
jdbc:mysql://localhost:3306/testdb?characterEncoding=utf-8&useSSL=false
5.2 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数?
解决办法:
修改文件datax/conf/core.json:
"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,解决方法可以搭建软连接
ln -s /usr/bin/python3 /usr/bin/python
或者若安装了python2也可以
ln -s /usr/bin/python2 /usr/bin/python
5.4 基于代码重新打包DataX
- 代码下载地址
https://github.com/taosdata/DataX
datax和datax web可以使用maven进行编译源码和打包,因此需要先安装maven。
在Linux系统中,可以使用以下命令安装maven:
sudo apt-get install maven
mvn -v
进入datax源代码目录,执行以下命令进行编译:
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指定。
然后重启一下涛思服务。
启动服务进程: systemctl start taosd
停止服务进程: systemctl stop taosd
重启服务进程: systemctl restart taosd
查看服务状态: systemctl status taosd
编译完成后,会在target目录下生成datax.tar.gz文件。
将datax.tar.gz文件解压到任意目录,例如/home/datax:
tar -zxvf datax.tar.gz -C /home/
进入datax目录,编辑job目录下的job.json文件,配置datax的运行参数。
安装maven并切换阿里镜像源。不然编译的时候会找不到第三方依赖项。
修改为国内阿里镜像源,找到/usr/share/maven/conf/settings.xml文件,打开并修改以下:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
settings.xml文件可能会显示只读。需要修改下权限再保存它。
sudo chmod 777 /usr/share/maven/conf/settings.xml
打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ 。
结语
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地
//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!