以前了解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 整体的架构如下

安装部署

环境要求

  1. MySQL (5.5+) 必选,对应客户端可以选装, Linux服务上若安装mysql的客户端可以通过部署脚本快速初始化数据库
  2. JDK (1.8.0_xxx) 必选
  3. Maven (3.6.1+) 必选
  4. DataX 必选
  5. 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,那这个时候只有任务构建这个模块是我们需要的,其他的监控、数据源管理调度系统已经有了,所以这个东西应用场景有限,只能作为一个参考。