DataX是阿里云DataWorks数据集成的开源版本。下载即可用,支持linux和windows,只需要短短几步骤就可以完成数据的传输。
官网地址:
https://github.com/alibaba/DataX
DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。
DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。
DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
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 | √ | √ | 读 、写 |
https://github.com/alibaba/DataX/blob/master/userGuid.md
wget https://codeload.github.com/alibaba/DataX/zip/master
git clone [email protected]:alibaba/DataX.git
或者
# 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如下:
输入命令检查java是否已安装。
java -version
说明java没有安装。
安装java环境,输入如下代码如下:
apt-get install openjdk-11-jre-headless openjdk-11-jdk-headless
输入命令检查python是否已安装。
python -v
python3 -v
下载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
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
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;
show databases;
use dataweb;
show tables;
# 查看监听
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
https://github.com/WeiYe-Jing/datax-web
DataX集成可视化页面,选择数据源即可一键生成数据同步任务,支持RDBMS、Hive、HBase、ClickHouse、MongoDB等数据源,批量创建RDBMS数据同步任务,集成开源调度系统,支持分布式、增量同步数据、实时查看运行日志、监控执行器资源、KILL运行进程、数据源信息加密等。
https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md
https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg
提取码:cpsk
tar -zxvf datax-web-{VERSION}.tar.gz
./bin/install.sh
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)
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等信息
cd ./datax-web
sudo vi ./modules/datax-executor/bin/env.properties
./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 就可以直接访问系统;
输入DataX的测试命令如下:
python3 datax.py ../job/job.json
通过命令生成datax任务的模板json文件。
cd ./datax/bin/
python datax.py -r mysqlreader -w mysqlwriter > mysql2mysql.json
cat mysql2mysql.json
根据各自需求,按照模板修改文件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
"column": ["user_id", "name"],
再次执行命令如下:
python ./datax.py ./mysql2mysql.json
问题:
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
解决办法:
修改文件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即可。
解决办法:
因为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
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>aliyunmavenid>
<mirrorOf>*mirrorOf>
<name>阿里云公共仓库name>
<url>https://maven.aliyun.com/repository/publicurl>
mirror>
settings.xml文件可能会显示只读。需要修改下权限再保存它。
sudo chmod 777 /usr/share/maven/conf/settings.xml
打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ 。
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地
//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!