以前了解datax,感觉对易用性不大好,目前发现已经图形配置工具。简单整理一下。
DataX—Web 部署使用
Datax 的使用过程中,我们会发现,不管是利用 java 调用以及 python 命令启动的方式,我们都无法进行任务的管理,并且每次执行任务前,我们 都需要编辑 Json 配置文件,这是比较繁琐的,随着业务的增加,配置文件 不方便管理和迁移并且每次执行都需要记录命令。 同时目前 DataX 只支持 单机版,无法调用远程的 datax,并且多节点之间的协作不能控制。
因此,开发一款支持远程分布式调用 Datax 的可视化管理工具非常有必要,Datax-Web 就是这样的一款工具。
DataX Web是在DataX之上开发的分布式数据同步工具,提供简单易用的 操作界面,降低用户使用DataX的学习成本,缩短任务配置时间,避免配置过程中出错。用户可通过页面选择数据源即可创建数据同步任务,支持RDBMS、Hive、HBase、ClickHouse、MongoDB等数据源,RDBMS数据源可批量创建数据同步任务,支持实时查看数据同步进度及日志并提供终止同步功能,集成并二次开发xxl-job可根据时间、自增主键增量同步数据。
任务”执行器”支持集群部署,支持执行器多节点路由策略选择,支持超时控制、失败重试、失败告警、任务依赖,执行器CPU.内存.负载的监控等等。后续还将提供更多的数据源支持、数据转换UDF、表结构同步、数据同步血缘等更为复杂的业务场景。
DataX—Web 架构
DataX—Web 整体的架构如下
安装部署
环境要求
- MySQL (5.5+) 必选,对应客户端可以选装, Linux服务上若安装mysql的客户端可以通过部署脚本快速初始化数据库
- JDK (1.8.0_xxx) 必选
- Maven (3.6.1+) 必选
- DataX 必选
- Python (2.x) (支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下) 必选,主要用于调度执行底层DataX的启动脚本,默认的方式是以Java子进程方式执行DataX,用户可以选择以Python方式来做自定义的改造
获取安装包
1 下载官方提供的版本tar版本包
点击下载 提取码:cpsk
2 编译打包(官方提供的tar包跳过)
直接从Git上面获得源代码
在项目的根目录下执行如下命令
mvn clean install
执行成功的话可以看到下面的输出
注意如果你的java版本太高可能会有下面的报错,所以建议使用1.8
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project datax-core: Compilation failure: Compilation failure:
[ERROR] /Users/kingcall/workspace/idea/datax-web/datax-core/src/main/java/com/wugui/datatx/core/glue/impl/SpringGlueFactory.java:[11,24] 程序包javax.annotation不存在
[ERROR] /Users/kingcall/workspace/idea/datax-web/datax-core/src/main/java/com/wugui/datatx/core/glue/impl/SpringGlueFactory.java:[45,54] 找不到符号
执行成功后将会在工程的build目录下生成安装包
build/datax-web-{VERSION}.tar.gz
此时的目录结构如下
部署
解压安装包
将压缩包放在选定的安装目录,解压安装包
tar xzvf datax-web-2.1.2.tar.gz
执行安装脚本
进入解压后的目录,找到bin目录下面的install.sh文件,如果选择交互式的安装,则直接执行
./bin/install.sh
在交互模式下,对各个模块的package压缩包的解压以及configure配置脚本的调用,都会请求用户确认,可根据提示查看是否安装成功,如果没有安装成功,可以重复尝试; 如果不想使用交互模式,跳过确认过程,则执行以下命令安装
./bin/install.sh --force
这里我们使用交互式安装
Password:
2022-10-01 20:18:45.3N [INFO] (96375) ####### Start To Uncompress Packages ######
2022-10-01 20:18:45.3N [INFO] (96375) Uncompressing….
Do you want to decompress this package: [datax-admin_2.1.2_1.tar.gz]” />
配置数据库
我们需要配置datax-web 的数据库地址信息
vim modules/datax-admin/conf/bootstrap.properties
内容如下
#DatabaseDB_HOST=localhostDB_PORT=3306DB_USERNAME=rootDB_PASSWORD=www1234DB_DATABASE=datax_web
初始化数据库
创建一个名为datax_web
的数据库
mysql -uroot -pwww1234 -e "create database datax_web"
然后执行./bin/db/datax-web.sql
SQL 文件
mysql -uroot -pwww1234 -Ddatax_web < ./bin/db/datax_web.sql
我们看到下面的表已经被创建
其他配置
配置executor
vim modules/datax-executor/bin/env.properties
主要配置端口和可执行脚本
DATAX_ADMIN_PORT=9527
## PYTHON脚本执行位置
#PYTHON_PATH=/home/hadoop/install/datax/bin/datax.py
PYTHON_PATH=/Users/liuwenqiang/workspace/soft/datax/bin/datax.py
端口和服务端保持一致,默认是9527
启动服务
./bin/start-all.sh
启动成功后可以看到下面的进程
99124 DataXExecutorApplication98904 DataXAdminApplication
打开浏览器进入
http://localhost:9527/index.html
‘
输入用户名 admin 密码 123456 就可以直接访问系统
停止服务或者启动某个服务
# 启动 admin 或者 execuotr
./bin/start.sh -m {module_name}
# 停止所有服务
./bin/stop-all.sh
# 当然也可以单一地停止某一模块服务:
./bin/stop.sh -m {module_name}
集群部署
修改modules/datax-executor/conf/application.yml文件下admin.addresses地址。 为了方便单机版部署,项目目前没有将ip部分配置到env.properties,部署多节点时可以将整个地址作为变量配置到env文件。
将官方提供的tar包或者编译打包的tar包上传到服务节点,按照步骤5中介绍的方式单一地启动某一模块服务即可。例如执行器需要部署多个节点,仅需启动执行器项目,执行 ./bin/start.sh -m datax-executor
调度中心、执行器支持集群部署,提升调度系统容灾和可用性。
* 1.调度中心集群:
DB配置保持一致;
集群机器时钟保持一致(单机集群忽视);
* 2.执行器集群:
执行器回调地址(admin.addresses)需要保持一致;执行器根据该配置进行执行器自动注册等操作。
同一个执行器集群内AppName(executor.appname)需要保持一致;调度中心根据该配置动态发现不同集群的在线执行器列表。
可以看到我们目前只有一个executor
使用
前面我们已经部署好了,下面我们看怎么使用DataX—Web
创建项目
首先在项目管理页面上创建项目
创建数据源
在数据源管理页面上创建数据源
我们可以点击测试进行测试看配置是否正确
创建任务模版
在任务管理页面下的DataX任务模版
菜单下创建任务模版
构建任务
构建reader
从数据源中选择即可
构建writer
从数据源中选择即可,这里我们选择了同一个库下的city_sink
,这个表和city 的表结构完全相同 create table city_sink like city;
字段映射
构建
第一步 点击构建则会生成json
第二步 选择任务模版,然后下一步则会生成任务
这里我们可以在操作按钮处选择执行一次,然后我们发现任务的执行状态已经变成成功了
可以看到数据已经同步到了city_sink
Mysql同步数据到Hive
我们只需要创建一个Hive 的数据源
然后构建任务的时候,构建writer 选择hive ,然后选择对应的表即可创建,因为过程很简单这里就不演示了
然后执行发现执行失败了
去日志管理页面查看日志
告诉我们参数不对,缺少了必须填写的参数
我们可以再回过头去看writer 的配置,我们发现确实有很多参数没有配置,参考上一节
既然如此我们就编辑下这个配置,更新配置后再次执行发现执行成功了
hdfs 上也看到数据了
Hive 数据同步到Mysql
下面我们同步Hive的数据到Mysql, 我们把上同步到Hive 的city 表同步到mysql 的city_sink , 这里我们先清空mysql 的city_sink,或者在writer的时候通过前置SQL清空
reader 的信息如下,发现我们在选择hive 作为writer 的时候没有让我们填写 “path、defaultFS” 等信息,导致任务报错,作为reader的时候却要我们写,所以发现还是有bug 的
任务已经被构建
执行成功了
总结
这一节主要部署了DataX—Web ,DataX—Web 主要解决了DataX的任务管理、运维的问题,而且有自己的调度,但是在整个数仓中却难以使用,因为我们无法将DataX—Web 和已有的调度系统进行整合。
所以比较好的方式是在我们的调度系统中去集成DataX—Web,那这个时候只有任务构建这个模块是我们需要的,其他的监控、数据源管理调度系统已经有了,所以这个东西应用场景有限,只能作为一个参考。