DataX Web 部署方案

1.DataX Web是什么

  DataX web是在DataX的基础上开发的分布式的数据同步工具,方便DataX的用户在网页上通过点击和配置就能完成DataX任务的配置和执行等动作。同时,DataX web是基于xxl-job进行二次开发的DataX任务管理后台,天生支持任务定时调度、日志查看等功能,能帮助用户更好地管理DataX任务。

因此,在学习使用DataX web之前,至少要了解过DataX和xxl-job,才能继续下去。

2.为什么要使用DataX Web

  DataX才是异构数据源进行数据同步的核心关键,DataX web只是为使用DataX提供了便利,因此DataX web的使用并不是必须的,但是作为一个追求高效率和简化工作的工程师,好的工具必然不会放过。那么DataX web有哪些好处呢?

  1. 提供简单易用的操作界面,降低用户使用DataX的学习成本;
  2. 缩短任务配置时间,避免配置过程中出错;
  3. 可通过页面选择数据源即可创建数据同步任务,支持RDBMS、Hive、HBase、ClickHouse、MongoDB等数据源;
  4. RDBMS数据源可批量创建数据同步任务;
  5. 支持实时查看数据同步进度及日志并提供终止同步功能;
  6. 集成并二次开发xxl-job可根据时间、自增主键增量同步数据;
  7. 任务"执行器"支持集群部署,支持执行器多节点路由策略选择,支持超时控制、失败重试、失败告警、任务依赖;
  8. 支持对执行器CPU、内存、负载的监控等等;

DataX web是如何工作的呢?

DataX web是如何工作的呢?

                                  DataX web架构图

可以看到,整体的架构和xxl-job基本类似,调度中心进行任务的触发和调度,同时监控各个执行器的执行,汇总任务的执行过程和结果。

3.DataX Web 能做什么?

  • 通过Web构建DataX Json;
  • 2、DataX Json保存在数据库中,方便任务的迁移,管理;
  • 3、Web实时查看抽取日志,类似Jenkins的日志控制台输出功能;
  • 4、DataX运行记录展示,可页面操作停止DataX作业;
  • 5、支持DataX定时任务,支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;
  • 6、调度采用中心式设计,支持集群部署;
  • 7、任务分布式执行,任务"执行器"支持集群部署;
  • 8、执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行;
  • 9、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等;
  • 10、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
  • 11、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务;
  • 12、任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
  • 13、任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式;
  • 14、用户管理:支持在线管理系统用户,存在管理员、普通用户两种角色;
  • 15、任务依赖:支持配置子任务依赖,当父任务执行结束且执行成功后将会主动触发一次子任务的执行, 多个子任务用逗号分隔;
  • 16、运行报表:支持实时查看运行数据,以及调度报表,如调度日期分布图,调度成功分布图等;
  • 17、指定增量字段,配置定时任务自动获取每次的数据区间,任务失败重试,保证数据安全;
  • 18、页面可配置DataX启动JVM参数;
  • 19、数据源配置成功后添加手动测试功能;
  • 20、可以对常用任务进行配置模板,在构建完JSON之后可选择关联模板创建任务;
  • 21、jdbc添加hive数据源支持,可在构建JSON页面选择数据源生成column信息并简化配置;
  • 22、优先通过环境变量获取DataX文件目录,集群部署时不用指定JSON及日志目录;
  • 23、通过动态参数配置指定hive分区,也可以配合增量实现增量数据动态插入分区;
  • 24、任务类型由原来DataX任务扩展到Shell任务、Python任务、PowerShell任务;
  • 25、添加HBase数据源支持,JSON构建可通过HBase数据源获取hbaseConfig,column;
  • 26、添加MongoDB数据源支持,用户仅需要选择collectionName即可完成json构建;
  • 27、添加执行器CPU、内存、负载的监控页面;
  • 28、添加24类插件DataX JSON配置样例
  • 29、公共字段(创建时间,创建人,修改时间,修改者)插入或更新时自动填充
  • 30、对swagger接口进行token验证
  • 31、任务增加超时时间,对超时任务kill datax进程,可配合重试策略避免网络问题导致的datax卡死。
  • 32、添加项目管理模块,可对任务分类管理;
  • 33、对RDBMS数据源增加批量任务创建功能,选择数据源,表即可根据模板批量生成DataX同步任务;
  • 34、JSON构建增加ClickHouse数据源支持;
  • 35、执行器CPU.内存.负载的监控页面图形化;
  • 36、RDBMS数据源增量抽取增加主键自增方式并优化页面参数配置;
  • 37、更换MongoDB数据源连接方式,重构HBase数据源JSON构建模块;
  • 38、脚本类型任务增加停止功能;
  • 39、rdbms json构建增加postSql,并支持构建多个preSql,postSql;
  • 40、数据源信息加密算法修改及代码优化;
  • 41、日志页面增加DataX执行结果统计数据;

4.安装

参考地址:https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md

源码地址:https://github.com/WeiYe-Jing/datax-web

1)下载官方提供的版本tar版本包

下载地址:https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg 提取码:cpsk

2) 编译打包(官方提供的tar包跳过)

直接从Git上面获得源代码,在项目的根目录下执行如下命令

复制代码
mvn clean install 

执行成功后将会在工程的build目录下生成安装包

复制代码
build/datax-web-{VERSION}.tar.gz

上传服务器(Linux)

4)解压安装包

复制代码
tar -zxvf datax-web-{VERSION}.tar.gz

以上命令是将解压后的文件复制到opt/module目录下,如不需要此操作,可直接解压到本目录。

5)执行一键安装脚本

进入解压后的目录,找到bin目录下面的install.sh文件,如果选择交互式的安装,则直接执行

复制代码
./bin/install.sh

在交互模式下,对各个模块的package压缩包的解压以及configure配置脚本的调用,都会请求用户确认,可根据提示查看是否安装成功,如果没有安装成功,可以重复尝试; 如果不想使用交互模式,跳过确认过程,则执行以下命令安装

复制代码
./bin/install.sh --force

本人才用的是交互式的安装方式。

查看数据库

按照提示输入数据库地址,端口号,用户名,密码以及数据库名称,大部分情况下即可快速完成初始化。 如果服务上并没有安装mysql命令,则可以取用目录下/bin/db/datax-web.sql脚本去手动执行,完成后修改相关配置文件.

复制代码
vi ./modules/datax-admin/conf/bootstrap.properties

在项目目录下/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=

如果遇到不让写就利用 :w! 命令强制写。

6)启动服务

复制代码
./bin/start-all.sh

如果运行提示JAVA_HOME找不到就配置一下 etc/profile中的JAVA_HOME,JRE_HOME。

参考:https://blog.csdn.net/qq_38623939/article/details/110946321

如果运行中提示JPS:未找到,则参考:https://blog.csdn.net/prxhlirr/article/details/126704994

在浏览器输入ip:9527/index

默认账户:admin 密码:123456

5.DataX-web使用

参考地址:https://gitee.com/sanerzone/datax-web/

5.1 创建数据源

填写完信息,点击测试。

注意:jdbc url最好还是按照spring boot中yml中写法,要不有时候会失败。这里涉及到时区的问题!!

在创建一个mongodb的数据源

注意:在创建数据源之前最好是把数据表或集合都创建好,如果是集合中的字段也最好创建完,要不再后续的任务构建中会找不到,如果找不到就重新编辑一下数据源,不是实时根据数据源变化的。

5.2 新建项目管理

5.3 新建datax任务模板

5.4 任务构建

点击"构建",选择模板。

5.5 任务管理

选择任务,然后执行调度任务。

例如:选择ID =7的任务的操作。

将状态改为"启动",执行一次,查看日志,如提示:执行器地址为空,则说明,执行器注册失败。

复制代码
//将所有服务停止

./stop-all.sh

//首先启动datax-admin

./start.sh -m datax-admin

//过一会再启动datax-executor

./start.sh -m datax-executor

重新登录,重新执行一次。

如果报错:

参考地址:https://blog.csdn.net/chrisy521/article/details/122033748

则需要修改文件datax/conf/core.json

复制代码
{
    "entry": {
        "jvm": "-Xms1G -Xmx1G",
        "environment": {}
    },
    "common": {
        "column": {
            "datetimeFormat": "yyyy-MM-dd HH:mm:ss",
            "timeFormat": "HH:mm:ss",
            "dateFormat": "yyyy-MM-dd",
            "extraFormats":["yyyyMMdd"],
            "timeZone": "GMT+8",
            "encoding": "utf-8"
        }
    },
    "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
            }
        },
        "container": {
            "job": {
                "reportInterval": 10000
            },
            "taskGroup": {
                "channel": 5
            },
            "trace": {
                "enable": "false"
            }

        },
        "statistics": {
            "collector": {
                "plugin": {
                    "taskClass": "com.alibaba.datax.core.statistics.plugin.task.StdoutPluginCollector",
                    "maxDirtyNumber": 10
                }
            }
        }
    }
}

修改core -> transport -> channel -> speed -> "byte": 2000000,将单个channel的大小改为2MB即可。

相关推荐
2分钟速写快排5 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60616 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角7 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!7 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰7 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi9 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen9 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马10 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒10 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端
乘风gg11 小时前
DeepSeek V4.1 Flash 来了,明天中午 Flash 降价 60%
前端·ai编程·claude