码云项目地址:datax-web: DataX集成可视化页面,选择数据源即可一键生成数据同步任务,支持批量创建RDBMS数据同步任务,集成开源调度系统,支持分布式、增量同步数据、实时查看运行日志、监控执行器资源、KILL运行进程、数据源信息加密等。
通过项目中的安装部署说明书:遇到很多坑,接下来我从头详细的记录我是如何搭建的和所遇到的坑解决方案。
datax-web部署方案 一、依赖资源1、datax:datax-web的核心资源包
2、jdk
3、Maven(编译工具)
4、python (推荐python 2.7, python 3需要修改datax相关配置)
5、tomcat (可不装)
6、mysql 5.7 或者8 (用于存放datax-web相关用户信息以及任务信息)
二、安装方案由于datax 以及data-web均需要依赖于java以及python环境,为了保障后续测试以及系统稳定运行,我们先安装java等相关环境。如果相关环境已经搭建好,可以直接查看第七节,datax-web部署的相关内容。
1.安装java1.1、查找java相关的列表
yum -y list java* yum search jdk
1.2、安装jdk
yum install java-1.8.0-openjdk.x86_64
输入javac 确实提示命令没找到,说明只是安装了jre 没有安装jdk
yum install -y devel
1.3、完成安装后验证
java -version javac
1.4、通过yum安装的默认路径为:/usr/lib/jvm
1.5、将jdk的安装路径加入到JAVA_HOME,添加环境变量
vi /etc/profile
在文件最后加入:
#set java environment JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64 PATH=$PATH:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME CLASSPATH PATH
修改/etc/profile之后让其生效
. /etc/profile
(注意 . 之后应有一个空格)
2、安装tomcatjar包需要承载在tomcat中运行,不知道为啥,直接用java运行jar包会报错,先暂且装上tomcat吧
2.1、安装
yum -y install tomcat
2.2、查看状态
systemctl status tomcat
2.3、启动tomcat:
systemctl start tomcat3、安装mysql(8.0)
3.1安装前先更新系统所有包
sudo yum update
(感觉不更新也没事,还好服务器网速快,几下就更新完了)
3.2添加 Yum 包
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
或者
wget http://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm
3.3 安装发行包
sudo rpm -ivh mysql80-community-release-el7-1.noarch.rpm
3.4 安装社区版server
sudo yum -y install mysql-community-server
3.5 启动守护进程
sudo systemctl start mysqld
3.6 查看状态
sudo systemctl status mysqld
3.7查看版本 (我是8.0.27)
mysql -V
3.8 修改密码
MySQL 安装过程中会为 root 用户生成一个临时密码,保存在 /var/log/mysqld.log 中。通过以下命令查看:
sudo grep 'temporary password' /var/log/mysqld.log
进入 MySQL 客户端修改:
mysql -u root -p
输入以上文件查看的密码,进入mysql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your passowrd'; ALTER USER 'root'@ IDENTIFIED BY 'your passowrd';
记住一定要加 ; ,否则Mysql无法运行
密码强度要求是:不少于12字符,必须包含大写字母、小写字母、数字和特殊字符。
3.9 配置远程访问
mysql配置好后,无法远程访问,需要进行相关配置
登录mysql后进行相关更改,将原有本地(localhost)访问权限修改为*
mysql -u root -p; use mysql; select host, user, authentication_string, plugin from user; GRANT ALL ON *.* TO 'root'@'%'; update user set host = '%' where user = 'root'; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES;
按CTRL+D 退出mysql编辑模式
3.10 防火墙相关配置
此步骤完成后,可以使用Navicat对mysql进行测试。如果无法连接,可以检查防火墙的情况,查看是否开启了相关端口。
systemctl status firewalld firewall-cmd --query-port=3306/tcp firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload firewall-cmd --query-port=3306/tcp
如果数据库工具可以连接,说明mysql已经配置完成。
4 python 安装linux中自带python 版本,可以直接进行查看 输入
python
直接查看结果,如果没有,再自己安装
5 datax安装5.1 下载
直接到github下载[datax部署包](http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz)即可,不需要对源码进行编译
5.2 解压
安装后对文件进行解压 一般将文件放到usr/local/src/ 文件夹下
cd /usr/local/src tar -zxvf datax.tar.gz chmod 755 datax cd datax
5.3 测试
测试datax是否安装好
首先需要删除隐藏文件,否则会报错
rm -rf /usr/local/src/datax/plugin/*/._* python /usr/local/src/datax/bin/datax.py /usr/local/src/datax/job/job.json
通过查看控制台结果,可以判断是否安装成功
5.4 环境变量配置(非必须)
vi /etc/profile
在文件最后加入:
#set datax environment DATAX_HOME=/usr/local/src/datax PATH=$PATH:$DATAX_HOME/bin export DATAX_HOME PATH
修改/etc/profile之后让其生效
. /etc/profile
此处配置完成后,后续配置datax-web后可以免去配置一些项目,如果不配环境变量,系统会默认读取/datax-executor/src/main/resources/application.yml文件下的logpath、jsonpath、pypath。如果配置了环境变量,上面三个path可以忽略,系统会优先使用环境变量。
六:DataX-WEB 安装部署1.IDEA编译打包
下载链接:https://pan.baidu.com/s/13a8nIpz6FL8y4fdE94trjQ
提取码:data
备注:官方提供的版本tar版本包
https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg 提取码:cpsk
在选定的安装目录,解压安装包
[root@cdh01 soft]# tar -zxvf datax-web-2.1.2.tar.gz -C /data/3.登录msyql建库
为接下来一键安装部署准备,这里我建的库是dataxweb(自己定义就好,前后保持一致)
mysql> create database dataxweb;4.执行一键安装脚本
进入解压后的目录,找到bin目录下面的install.sh文件,如果选择交互式的安装,则直接执行
[root@cdh01 bin]# ./install.sh
然后按照提示操作即可。包含了数据库初始化,如果你的服务上安装有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: dataxweb)
按照提示输入数据库地址,端口号,用户名,密码以及数据库名称,大部分情况下即可快速完成初始化。 如果服务上并没有安装mysql命令,则可以取用目录下/bin/db/datax-web.sql脚本去手动执行,完成后修改相关配置文件
vim /data/datax-web-2.1.2/modules/datax-admin/conf/bootstrap.properties #Database #DB_HOST= #DB_PORT= #DB_USERNAME= #DB_PASSWORD= #DB_DATAbase=
按照具体情况配置对应的值即可。
不建议执行下面的
./bin/install.sh --force
在交互模式下,对各个模块的package压缩包的解压以及configure配置脚本的调用,都会请求用户确认,可根据提示查看是否安装成功,如果没有安装成功,可以重复尝试; 如果不想使用交互模式,跳过确认过程,则执行以下命令安装
./bin/install.sh --force4.其他配置 4.1邮件服务
在项目目录:/data/datax-web-2.1.2/modules/datax-admin/bin/env.properties 配置邮件服务(可跳过)
MAIL_USERNAME="" MAIL_PASSWORD=""
此文件中包括一些默认配置参数,例如:server.port,具体请查看文件。
4.2指定PYTHON_PATH的路径vim /data/datax-web-2.1.2/modules/datax-executor/bin/env.properties ### 执行datax的python脚本地址 PYTHON_PATH=/data/datax/bin/datax.py ### 保持和datax-admin服务的端口一致;默认是9527,如果没改datax-admin的端口,可以忽略 DATAX_ADMIN_PORT=
此文件中包括一些默认配置参数,例如:executor.port,json.path,data.path等,具体请查看文件。
5.启动服务 5.1一键启动所有服务[root@cdh01 datax-web-2.1.2]# cd /data/datax-web-2.1.2 [root@cdh01 datax-web-2.1.2]# ./bin/start-all.sh
中途可能发生部分模块启动失败或者卡住,可以退出重复执行,如果需要改变某一模块服务端口号,则:
vi ./modules/{module_name}/bin/env.properties
找到SERVER_PORT配置项,改变它的值即可。 当然也可以单一地启动某一模块服务:
./bin/start.sh -m {module_name}
module_name可以为datax-admin或datax-executor
5.2一键停止所有服务[root@cdh01 datax-web-2.1.2]# cd /data/datax-web-2.1.2 [root@cdh01 datax-web-2.1.2]# ./bin/stop-all.sh
当然也可以单一地停止某一模块服务:
./bin/stop.sh -m {module_name}
module_name可以为datax-admin或datax-executor
5.3查看服务(注意!注意!)在Linux环境下使用JPS命令,查看是否出现DataXAdminApplication和DataXExecutorApplication进程,如果存在这表示项目运行成功
如果项目启动失败,请检查启动日志: modules/datax-admin/bin/console.out 或者 modules/datax-executor/bin/console.out四、DataX-WEB 运行 1.前端界面
部署完成后,在浏览器中输入 http://ip:port/index.html 就可以访问对应的主界面(ip为datax-admin部署所在服务器ip,port为为datax-admin 指定的运行端口9527)
输入用户名 admin 密码 123456 就可以直接访问系统
2.datax-web APIdatax-web部署成功后,可以了解datax-web API相关内容,网址: http://ip:port/doc.html
五、DataX-WEB 运行日志部署完成之后,在modules/对应的项目/data/applogs下(用户也可以自己指定日志,修改application.yml 中的logpath地址即可),用户可以根据此日志跟踪项目实际启动情况
如果执行器启动比admin快,执行器会连接失败,日志报"拒绝连接"的错误,一般是先启动admin,再启动executor,30秒之后会重连,如果成功请忽略这个异常。
六、DataX-WEB 实操 1.查看执行器查看web界面是否有注册成功的执行器,另外执行器可以根据需要改名称。
2.创建项目
3.创建任务模板
3.2路由策略:当执行器集群部署时,提供丰富的路由策略,包括:FIRST(第一个):固定选择第一个机器;
LAST(最后一个):固定选择最后一个机器;
ROUND(轮询):依次分配任务;
RANDOM(随机):随机选择在线的机器;
CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
LEAST_RECENTLY_USED(最近最久未使用):最久为使用的机器优先被选举;
FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
参考:https://www.jianshu.com/p/fa7186bea84b
阻塞处理策略:调度过于密集执行器来不及处理时的处理策略;
- 单机串行:调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
- 丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
- 覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;
增量增新建议将阻塞策略设置为丢弃后续调度或者单机串行
设置单机串行时应该注意合理设置重试次数(失败重试的次数*每次执行时间<任务的调度周期),重试的次数如果设置的过多会导致数据重复,例如任务30秒执行一次,每次执行时间需要20秒,设置重试三次,如果任务失败了,第一个重试的时间段为1577755680-1577756680,重试任务没结束,新任务又开启,那新任务的时间段会是1577755680-1577758680
先选择DataX任务,后续配置完详细任务后可以更改
3.4其它可以根据需求填写
4.数据源管理根据不同数据源,配置参数。
5.任务构建构建reader
下一步:
构建writer
下一步:
字段映射
下一步:
点击"构建”
点击"选择模板"
点击下一步,任务到此创建成功。刷新页面,点击 任务管理 -》 任务管理
点击 “执行一次”
点击 “查询日志” (如果无法查询到,尝试刷新页面,进入 日志管理 即可看到)
说明:
1.我是模拟mysql往mysql同步数据,第一次同步时查看日志报错如下:
具体错误信息为:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server..划重点因为数据库版本太高了而对应的驱动器太低了
2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] java.lang.Exception: DataX无法连接对应的数据库,可能原因是:1) 配置的ip/port/database/jdbc错误,无法连接。2) 配置的username/password错误,鉴权失败。请和DBA确认该数据库的连接信息是否正确。 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.util.DBUtil$2.call(DBUtil.java:71) ~[plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.util.DBUtil$2.call(DBUtil.java:51) ~[plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.common.util.RetryUtil$Retry.call(RetryUtil.java:164) ~[datax-common-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.common.util.RetryUtil$Retry.doRetry(RetryUtil.java:111) ~[datax-common-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.common.util.RetryUtil.executeWithRetry(RetryUtil.java:30) [datax-common-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.util.DBUtil.chooseJdbcUrl(DBUtil.java:51) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.reader.util.OriginalConfPretreatmentUtil.dealJdbcAndTable(OriginalConfPretreatmentUtil.java:92) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.reader.util.OriginalConfPretreatmentUtil.simplifyConf(OriginalConfPretreatmentUtil.java:59) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.reader.util.OriginalConfPretreatmentUtil.doPretreatment(OriginalConfPretreatmentUtil.java:33) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.reader.CommonRdbmsReader$Job.init(CommonRdbmsReader.java:55) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.reader.mysqlreader.MysqlReader$Job.init(MysqlReader.java:37) [mysqlreader-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:673) [datax-core-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:303) [datax-core-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:113) [datax-core-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.Engine.start(Engine.java:92) [datax-core-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.Engine.entry(Engine.java:171) [datax-core-0.0.1-SNAPSHOT.jar:na] 2021-12-30 03:10:37 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.Engine.main(Engine.java:204) [datax-core-0.0.1-SNAPSHOT.jar:na]
查看/user/local/src/datax/plugin/writer/mysqlwriter/libs
/user/local/src/datax/plugin/reader/mysqlreader/libs
发现确实是mysql-connector-java-5.1.34 5.1.34版本,而我安装的mysql版本是8.0.27,所以
下载对应版本jar包进行替换:
再运行一次,就好了。
2.一键全部启动没成功,我启动服务是一个一个启动滴。
参考文章:CDH5.13.0集群环境 安装部署data-web(单机部署,log4j版本为2.16)_海边捡贝壳的老头的博客-CSDN博客



