# Datax-Web-Admin **Repository Path**: tjxuyue/datax-web-admin ## Basic Information - **Project Name**: Datax-Web-Admin - **Description**: 基于Datax、xxl-job的数据集成工具 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 20 - **Forks**: 12 - **Created**: 2021-09-08 - **Last Updated**: 2025-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: datax, xxljob, 数据采集, 数据集成 ## README # 前言 因工作中有数据治理系统的开发需求,数据治理的基础是数据集成,说白了就是从各种奇奇怪怪的数据来源把数据抽取到统一的数据仓库或数据湖中,因此接触了Datax,主要用于批数据的集成,流数据集成可以考虑Kafak connect,后续有时间再写个demo。 前面有大神已经开发了datax-web[https://github.com/WeiYe-Jing/datax-web],功能已经很强大,但是在实际工作中很多工作是开发和调试Datax writer和Datax reader,因此在它的基础上完善Datax读写插件的上传、同步和管理功能。 # 基础框架: - Datax:https://github.com/alibaba/DataX - xxl-job:https://github.com/xuxueli/xxl-job - datax-web:https://github.com/WeiYe-Jing/datax-web - 前端框架:https://panjiachen.github.io/vue-element-admin-site/zh/ # 架构图 ![系统架构图](./doc/images/1631093417587.png) 本工具的核心功能是支持各类数据库之间的数据自动抽取和加载 - Web服务:基于Vue-Element-Admin脚手架开发,运行在nginx中 - Datax-job-admin:基于xxl-job-admin的springboot服务,是datax任务的调度中心 - 任务指令:包括xxl-job任务调度指令、datax json参数和datax plugin同步指令 - Data-job-executor:基于xxl-job-executor-springboot开发的服务,用于接收调度指令、datax json,执行datax任务,datax源码存放在Data-job-executor中,需安装python2.7环境,可以有多个Data-job-executor - datax reader:读取源数据库的插件,基于java开发 - datax writer:写入数据的插件,基于java开发 # 安装部署(docker) ## 准备环境 - 1.docker 18.09.6 - 2.docker-compose 1.26.2 - 3.MySQL5.7数据库 ## 下载镜像 ``` shell docker pull nginx:1.17 docker pull tjxuyue/datax-job-admin:1.0 docker pull tjxuyue/datax-job-executor:1.0 ``` ## 创建数据库dataxweb,并执行下面的SQL初始化数据库 ``` sql SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_plugin -- ---------------------------- DROP TABLE IF EXISTS `t_plugin`; CREATE TABLE `t_plugin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uuid` varchar(50) NOT NULL, `name` varchar(255) DEFAULT NULL, `file_name` varchar(255) DEFAULT NULL, `type` varchar(20) DEFAULT NULL, `file_volumn` int(11) DEFAULT NULL, `delete_status` tinyint(4) DEFAULT NULL, `create_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, `creator` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`,`uuid`) ) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of t_plugin -- ---------------------------- -- ---------------------------- -- Table structure for xxl_job_group -- ---------------------------- DROP TABLE IF EXISTS `xxl_job_group`; CREATE TABLE `xxl_job_group` ( `id` int(11) NOT NULL AUTO_INCREMENT, `app_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '执行器AppName', `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '执行器名称', `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入', `address_list` text COMMENT '执行器地址列表,多地址逗号分隔', `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of xxl_job_group -- ---------------------------- -- ---------------------------- -- Table structure for xxl_job_info -- ---------------------------- DROP TABLE IF EXISTS `xxl_job_info`; CREATE TABLE `xxl_job_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `job_group` int(11) NOT NULL COMMENT '执行器主键ID', `job_desc` varchar(255) NOT NULL, `add_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, `author` varchar(64) DEFAULT NULL COMMENT '作者', `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件', `schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型', `schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型', `misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略', `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略', `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略', `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒', `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数', `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型', `glue_source` mediumtext COMMENT 'GLUE源代码', `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注', `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间', `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔', `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行', `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间', `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间', `job_datax_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of xxl_job_info -- ---------------------------- -- ---------------------------- -- Table structure for xxl_job_lock -- ---------------------------- DROP TABLE IF EXISTS `xxl_job_lock`; CREATE TABLE `xxl_job_lock` ( `lock_name` varchar(50) NOT NULL COMMENT '锁名称', PRIMARY KEY (`lock_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of xxl_job_lock -- ---------------------------- INSERT INTO `xxl_job_lock` VALUES ('schedule_lock'); -- ---------------------------- -- Table structure for xxl_job_log -- ---------------------------- DROP TABLE IF EXISTS `xxl_job_log`; CREATE TABLE `xxl_job_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `job_group` int(11) NOT NULL COMMENT '执行器主键ID', `job_id` int(11) NOT NULL COMMENT '任务,主键ID', `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址', `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', `executor_param` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '执行器任务参数', `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2', `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数', `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间', `trigger_code` int(11) NOT NULL COMMENT '调度-结果', `trigger_msg` text COMMENT '调度-日志', `handle_time` datetime DEFAULT NULL COMMENT '执行-时间', `handle_code` int(11) NOT NULL COMMENT '执行-状态', `handle_msg` text COMMENT '执行-日志', `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败', PRIMARY KEY (`id`), KEY `I_trigger_time` (`trigger_time`), KEY `I_handle_code` (`handle_code`) ) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of xxl_job_log -- ---------------------------- -- ---------------------------- -- Table structure for xxl_job_logglue -- ---------------------------- DROP TABLE IF EXISTS `xxl_job_logglue`; CREATE TABLE `xxl_job_logglue` ( `id` int(11) NOT NULL AUTO_INCREMENT, `job_id` int(11) NOT NULL COMMENT '任务,主键ID', `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型', `glue_source` mediumtext COMMENT 'GLUE源代码', `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注', `add_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of xxl_job_logglue -- ---------------------------- -- ---------------------------- -- Table structure for xxl_job_log_report -- ---------------------------- DROP TABLE IF EXISTS `xxl_job_log_report`; CREATE TABLE `xxl_job_log_report` ( `id` int(11) NOT NULL AUTO_INCREMENT, `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间', `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量', `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量', `fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量', `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of xxl_job_log_report -- ---------------------------- -- ---------------------------- -- Table structure for xxl_job_registry -- ---------------------------- DROP TABLE IF EXISTS `xxl_job_registry`; CREATE TABLE `xxl_job_registry` ( `id` int(11) NOT NULL AUTO_INCREMENT, `registry_group` varchar(50) NOT NULL, `registry_key` varchar(255) NOT NULL, `registry_value` varchar(255) NOT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) ) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of xxl_job_registry -- ---------------------------- -- ---------------------------- -- Table structure for xxl_job_user -- ---------------------------- DROP TABLE IF EXISTS `xxl_job_user`; CREATE TABLE `xxl_job_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '账号', `password` varchar(50) NOT NULL COMMENT '密码', `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员', `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割', PRIMARY KEY (`id`), UNIQUE KEY `i_username` (`username`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of xxl_job_user -- ---------------------------- INSERT INTO `xxl_job_user` VALUES ('1', 'admin', 'e10adc3949ba59abbe56e057f20f883e', '1', null); ``` ## 配置nginx ### 执行下列命令,创建文件夹 ``` shell cd /root mkdir datax-web-admin cd datax-web-admin mkdir datax-web-nginx cd datax-web-nginx mkdir conf mkdir html mkdir logs cd html mkdir datax ``` ### 创建nginx.conf配置文件 ``` shell vi /root/datax-web-admin/datax-web-nginx/conf/nginx.conf ``` 复制下面的内容到nginx.conf 文件中 ``` shell # 启动进程,通常设置成和 CPU 的数量相等 worker_processes 2; events { # epoll 是多路复用 IO(I/O Multiplexing) 中的一种方式 # 但是仅用于 linux2.6 以上内核,可以大大提高 nginx 的性能 use epoll; # 单个后台 worker process 进程的最大并发链接数 worker_connections 1024; } http { # 设定 mime 类型,类型由 mime.type 文件定义 include mime.types; default_type application/octet-stream; # sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用, # 必须设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的 uptime. sendfile on; # 连接超时时间 keepalive_timeout 300; # 设定请求缓冲 client_header_buffer_size 20M; # upload size limit client_max_body_size 256M; server { listen 80; # 虚拟主机名称这里配置 IP 地址 server_name localhost; # 所有的请求都以 / 开始,所有的请求都可以匹配此 location location / { root /usr/share/nginx/html; index index.html index.htm; } location /api/ { proxy_pass http://datax-job-admin:8080/; } } } ``` 将[https://gitee.com/tjxuyue/datax-web-admin/tree/master/datax-web/dist](https://gitee.com/tjxuyue/datax-web-admin/tree/master/datax-web/dist)下的所有文件拷贝到/root/datax-web-admin/datax-web-nginx/html/datax下 ## 编辑docker-compose文件 ``` shell vi /root/datax-web-admin/docker-compose.yml ``` ``` yml?linenums version: '3' services: nginx: image: nginx:1.17 ports: - "2071:80" volumes: - ./datax-web-nginx/html:/usr/share/nginx/html #将nginx的html文件映射到宿主机,方便部署前端文件 - ./datax-web-nginx/conf/nginx.conf:/etc/nginx/nginx.conf #将nginx的conf文件映射到宿主机,方便调试 - ./datax-web-nginx/logs:/var/log/nginx #将nginx的log文件映射到宿主机,方便调试 links: - datax-job-admin datax-job-admin: image: tjxuyue/datax-job-admin:1.0 ports: - "8080:8080" environment: SERVER_PORT: 8080 #配置服务端口 MYSQL_IP_PORT: x.x.x.x:3306 #配置MySQL数据库IP和PORT MYSQL_USERNAME: root #配置MySQL数据库用户名 MYSQL_PASSWORD: cetc@2021 #配置MySQL数据库密码 DATAX_PLUGIN_PATH: /datax/plugin/ datax-job-executor: image: tjxuyue/datax-job-executor:1.0 ports: - "8081:8081" - "9999:9999" environment: ADMIN_ADRRESS: http://192.168.12.100:8080/datax/web #调度中心地址,需要与上面的datax-job-admin容器对应,注意IP要可访问 EXECUTOR_APPNAME: datax-job-executor-1 #执行器名称,需要与调度中心的执行器的APPNAME保持一致 EXECUTOR_ADDRESS: http://192.168.12.100:9999 #本执行器部署的地址,IP用于与调度中心回调,需要保证可访问,端口与EXECUTOR_PORT保持一致 EXECUTOR_PORT: 9999 #默认使用9999 DATAX_PLUGIN_PATH: /datax/datax/plugin DATAX_BIN_PATH: /datax/datax/bin ``` ## 启动 ``` shell cd /root/datax-web-admin/ docker-compose up -d ``` ![启动三个容器](./doc/images/1631524436591.png) ## 使用 用浏览器访问部署的服务器http://x.x.x.x:2071/datax/,显示如下图表示已部署成功。 ![](./doc/images/1631523121021.png) # 使用说明 已MySQL数据库到MySQL数据库数据迁移为例 ## 下载mysqlreader和mysqlwriter到本地 mysqlreader:[下载地址](https://gitee.com/tjxuyue/datax-plugin/blob/master/reader/mysqlreader/mysqlreader.zip) mysqlwriter:[下载地址](https://gitee.com/tjxuyue/datax-plugin/blob/master/writer/mysqlwriter/mysqlwriter.zip) ## 进入解析器管理,点击添加解析器 ![](./doc/images/1631523221068.png) ## 添加MySQL读取解析器 ![](./doc/images/1631524167863.png) ## 添加MySQL写入解析器 ![](./doc/images/1631524516319.png) ## 添加执行器 ![](./doc/images/1631524570469.png) 名称自定义 APPNAME与执行器的配置保持一致datax-job-executor-1 使用自动注册 等待1-2分钟,执行器自动注册,点击刷新列表,地址一栏出现执行器地址 ![](./doc/images/1631524713878.png) ## 同步执行器:解析器管理->同步 点击全部同步 ![](./doc/images/1631524781094.png) ![同步成功](./doc/images/1631524838457.png) ## 创建任务 执行器:选择刚才创建执行器 任务名称:自定义 CRON:0 0 0 * * ? JSON:请根据DATAX官网说明配置json ![](./doc/images/1631525031643.png) ![执行一次](./doc/images/1631525102620.png) ![查看日志](./doc/images/1631525426695.png) ## 二次开发 ![源码结构](./doc/images/1631525514804.png) datax-job-admin:是基于Springboot的后台服务,采用常用的MVC框架,大部分代码都是XXL-JOB的代码,xxl-jobinfo对应任务管理,xxl-jobgroup对应执行器管理,plugin为插件管理 datax-job-core:是xxl-job的core代码 datax-job-executor:是基于xxl-job-executor-sample-springboot的执行器代码 data-web:基于vue element admin的前端代码,已删除大部分样例代码