【干货】Apache DolphinScheduler2.0升级3.0版本方案

升级背景

因项目需要使用数据质量模块功能,可以为数仓提供良好的数据质量监控功能。故要对已有2.0版本升级到3.0版本以上,此次选择测试了3.0.1 和 3.1.1 两个版本,对进行同数据等任务调度暂停等操作测试,最后选择3.0.1 版本

原因:

1. 3.1.1 在测试sql任务时 ,同时启动上百sql 任务时,会出现sql 任务报错,导致大量任务无法正常运行,询问社区大佬,这是DS本身bug导致,虽然此现象在3.0.1也有出现,不过出现几率较小。

2. DS3.0.1以上版本zookeeper的依赖版本进行了更新,查看驱动版本是3.8版本。我们生产不打算升级zk,故选择使用3.0.1版本。

此版本测试还是比较稳定的,功能比较完善,满足我们使用需求。

此次升级已经验证可行性,已在生产环境验证上线,对已有的问题,并给出了合理的解决方便,故写此篇文章,供各位同学参考。

升级方案

选定方案

采用数据库表同步的方式进行任务迁移,前期3.0 版本 和 2.0 版本同时运行,任务再验证没问题后,再逐步停止2.0版本。

原因:直接使用官网提供的升级脚本,无法正常运行,有较多问题,目前我们改造后,升级的数据库信息没问题,运行时数据信息有损坏,导致较多问题,所以为安全稳定,不直接使用官网提方案。

升级准备

1.首先对已有数据库进行备份,此项非常重要,

备份原始DS库:mysqldump -h ip -P 3306 -u 用户 -p 密码 数据库名  > /opt/new_dolphinscheduler.sql恢复到新库:mysql -u 用户 –p 密码 数据库名 < 备份文件.sql

2.对已有备份表进行表结构变更

####此脚本是官网脚本改的,添加了字段
/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements.  See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License.  You may obtain a copy of the License at**    http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.
*/SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));-- uc_dolphin_T_t_ds_alert_R_sign
drop PROCEDURE if EXISTS uc_dolphin_T_t_ds_alert_R_sign;
delimiter d//
CREATE PROCEDURE uc_dolphin_T_t_ds_alert_R_sign()
BEGINIF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNSWHERE TABLE_NAME='t_ds_alert'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME='sign')THEN
ALTER TABLE `t_ds_alert` ADD COLUMN `sign` char(40) NOT NULL DEFAULT '' COMMENT 'sign=sha1(content)' after `id`;
ALTER TABLE `t_ds_alert` ADD INDEX `idx_sign` (`sign`) USING BTREE;
END IF;
END;d//delimiter ;
CALL uc_dolphin_T_t_ds_alert_R_sign;
DROP PROCEDURE uc_dolphin_T_t_ds_alert_R_sign;-- add unique key to t_ds_relation_project_user
drop PROCEDURE if EXISTS add_t_ds_relation_project_user_uk_uniq_uid_pid;
delimiter d//
CREATE PROCEDURE add_t_ds_relation_project_user_uk_uniq_uid_pid()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_relation_project_user'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='uniq_uid_pid')THEN
ALTER TABLE t_ds_relation_project_user ADD UNIQUE KEY uniq_uid_pid(user_id, project_id);
END IF;
END;d//delimiter ;
# CALL add_t_ds_relation_project_user_uk_uniq_uid_pid;
DROP PROCEDURE add_t_ds_relation_project_user_uk_uniq_uid_pid;-- drop t_ds_relation_project_user key user_id_index
drop PROCEDURE if EXISTS drop_t_ds_relation_project_user_key_user_id_index;
delimiter d//
CREATE PROCEDURE drop_t_ds_relation_project_user_key_user_id_index()
BEGINIF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_relation_project_user'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='user_id_index')THEN
ALTER TABLE `t_ds_relation_project_user` DROP KEY `user_id_index`;
END IF;
END;
d//
delimiter ;
CALL drop_t_ds_relation_project_user_key_user_id_index;
DROP PROCEDURE drop_t_ds_relation_project_user_key_user_id_index;-- add unique key to t_ds_project
drop PROCEDURE if EXISTS add_t_ds_project_uk_unique_name;
delimiter d//
CREATE PROCEDURE add_t_ds_project_uk_unique_name()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_project'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='unique_name')THEN
ALTER TABLE t_ds_project ADD UNIQUE KEY unique_name(name);
END IF;
END;
d//
delimiter ;
CALL add_t_ds_project_uk_unique_name;
DROP PROCEDURE add_t_ds_project_uk_unique_name;drop PROCEDURE if EXISTS add_t_ds_project_uk_unique_code;
delimiter d//
CREATE PROCEDURE add_t_ds_project_uk_unique_code()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_project'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='unique_code')THEN
ALTER TABLE t_ds_project ADD UNIQUE KEY unique_code(code);
END IF;
END;
d//
delimiter ;
CALL add_t_ds_project_uk_unique_code;
DROP PROCEDURE add_t_ds_project_uk_unique_code;-- add unique key to t_ds_queue
drop PROCEDURE if EXISTS add_t_ds_queue_uk_unique_queue_name;
delimiter d//
CREATE PROCEDURE add_t_ds_queue_uk_unique_queue_name()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_queue'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='unique_queue_name')THEN
ALTER TABLE t_ds_queue ADD UNIQUE KEY unique_queue_name(queue_name);
END IF;
END;
d//
delimiter ;
CALL add_t_ds_queue_uk_unique_queue_name;
DROP PROCEDURE add_t_ds_queue_uk_unique_queue_name;-- add unique key to t_ds_udfs
drop PROCEDURE if EXISTS add_t_ds_udfs_uk_unique_func_name;
delimiter d//
CREATE PROCEDURE add_t_ds_udfs_uk_unique_func_name()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_udfs'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='unique_func_name')THEN
ALTER TABLE t_ds_udfs ADD UNIQUE KEY unique_func_name(func_name);
END IF;
END;
d//
delimiter ;
CALL add_t_ds_udfs_uk_unique_func_name;
DROP PROCEDURE add_t_ds_udfs_uk_unique_func_name;-- add unique key to t_ds_tenant
drop PROCEDURE if EXISTS add_t_ds_tenant_uk_unique_tenant_code;
delimiter d//
CREATE PROCEDURE add_t_ds_tenant_uk_unique_tenant_code()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_tenant'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='unique_tenant_code')THEN
ALTER TABLE t_ds_tenant ADD UNIQUE KEY unique_tenant_code(tenant_code);
END IF;
END;
d//
delimiter ;
CALL add_t_ds_tenant_uk_unique_tenant_code;
DROP PROCEDURE add_t_ds_tenant_uk_unique_tenant_code;-- ALTER TABLE `t_ds_task_instance` ADD INDEX `idx_code_version` (`task_code`, `task_definition_version`) USING BTREE;
drop PROCEDURE if EXISTS add_t_ds_task_instance_uk_idx_code_version;
delimiter d//
CREATE PROCEDURE add_t_ds_task_instance_uk_idx_code_version()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_task_instance'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='idx_code_version')THEN
ALTER TABLE `t_ds_task_instance` ADD INDEX `idx_code_version` (`task_code`, `task_definition_version`) USING BTREE;
END IF;
END;
d//
delimiter ;
CALL add_t_ds_task_instance_uk_idx_code_version;
DROP PROCEDURE add_t_ds_task_instance_uk_idx_code_version;-- ALTER TABLE `t_ds_task_instance` MODIFY COLUMN `task_params` longtext COMMENT 'job custom parameters' AFTER `app_link`;
drop PROCEDURE if EXISTS modify_t_ds_task_instance_col_task_params;
delimiter d//
CREATE PROCEDURE modify_t_ds_task_instance_col_task_params()
BEGINIF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME='t_ds_task_instance'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME ='task_params')THEN
ALTER TABLE `t_ds_task_instance` MODIFY COLUMN `task_params` longtext COMMENT 'job custom parameters' AFTER `app_link`;
END IF;
END;
d//
delimiter ;
CALL modify_t_ds_task_instance_col_task_params;
DROP PROCEDURE modify_t_ds_task_instance_col_task_params;-- ALTER TABLE `t_ds_task_instance` ADD COLUMN `task_group_id` int(11) DEFAULT NULL COMMENT 'task group id';
drop PROCEDURE if EXISTS add_t_ds_task_instance_col_task_group_id;
delimiter d//
CREATE PROCEDURE add_t_ds_task_instance_col_task_group_id()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME='t_ds_task_instance'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME ='task_group_id')THEN
ALTER TABLE `t_ds_task_instance` ADD COLUMN `task_group_id` int(11) DEFAULT NULL COMMENT 'task group id' after `var_pool`;
END IF;
END;
d//
delimiter ;
CALL add_t_ds_task_instance_col_task_group_id;
DROP PROCEDURE add_t_ds_task_instance_col_task_group_id;-- ALTER TABLE `t_ds_process_task_relation` ADD KEY `idx_code` (`project_code`, `process_definition_code`) USING BTREE;
drop PROCEDURE if EXISTS add_t_ds_process_task_relation_key_idx_code;
delimiter d//
CREATE PROCEDURE add_t_ds_process_task_relation_key_idx_code()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_process_task_relation'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='idx_code')THEN
ALTER TABLE `t_ds_process_task_relation` ADD KEY `idx_code` (`project_code`, `process_definition_code`) USING BTREE;
END IF;
END;
d//
delimiter ;
CALL add_t_ds_process_task_relation_key_idx_code;
DROP PROCEDURE add_t_ds_process_task_relation_key_idx_code;-- ALTER TABLE `t_ds_process_task_relation` ADD KEY `idx_pre_task_code_version` (`pre_task_code`,`pre_task_version`);
drop PROCEDURE if EXISTS add_t_ds_process_task_relation_key_idx_pre_task_code_version;
delimiter d//
CREATE PROCEDURE add_t_ds_process_task_relation_key_idx_pre_task_code_version()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_process_task_relation'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='idx_pre_task_code_version')THEN
ALTER TABLE `t_ds_process_task_relation` ADD KEY `idx_pre_task_code_version` (`pre_task_code`,`pre_task_version`);
END IF;
END;
d//
delimiter ;
CALL add_t_ds_process_task_relation_key_idx_pre_task_code_version;
DROP PROCEDURE add_t_ds_process_task_relation_key_idx_pre_task_code_version;-- ALTER TABLE `t_ds_process_task_relation` ADD KEY `idx_post_task_code_version` (`post_task_code`,`post_task_version`);
drop PROCEDURE if EXISTS add_t_ds_process_task_relation_key_idx_post_task_code_version;
delimiter d//
CREATE PROCEDURE add_t_ds_process_task_relation_key_idx_post_task_code_version()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_process_task_relation'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='idx_post_task_code_version')THEN
ALTER TABLE `t_ds_process_task_relation` ADD KEY `idx_post_task_code_version` (`post_task_code`,`post_task_version`);
END IF;
END;
d//
delimiter ;
CALL add_t_ds_process_task_relation_key_idx_post_task_code_version;
DROP PROCEDURE add_t_ds_process_task_relation_key_idx_post_task_code_version;-- ALTER TABLE `t_ds_process_task_relation_log` ADD KEY `idx_process_code_version` (`process_definition_code`,`process_definition_version`) USING BTREE;
drop PROCEDURE if EXISTS add_t_ds_process_task_relation_key_idx_process_code_version;
delimiter d//
CREATE PROCEDURE add_t_ds_process_task_relation_key_idx_process_code_version()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_process_task_relation_log'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='idx_process_code_version')THEN
ALTER TABLE `t_ds_process_task_relation_log` ADD KEY `idx_process_code_version` (`process_definition_code`,`process_definition_version`) USING BTREE;
END IF;
END;
d//
delimiter ;
CALL add_t_ds_process_task_relation_key_idx_process_code_version;
DROP PROCEDURE add_t_ds_process_task_relation_key_idx_process_code_version;-- ALTER TABLE `t_ds_task_definition_log` ADD INDEX `idx_project_code` (`project_code`) USING BTREE;
drop PROCEDURE if EXISTS add_t_ds_task_definition_log_key_idx_process_code_version;
delimiter d//
CREATE PROCEDURE add_t_ds_task_definition_log_key_idx_process_code_version()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_task_definition_log'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='idx_project_code')THEN
ALTER TABLE `t_ds_task_definition_log` ADD INDEX `idx_project_code` (`project_code`) USING BTREE;
END IF;
END;
d//
delimiter ;
CALL add_t_ds_task_definition_log_key_idx_process_code_version;
DROP PROCEDURE add_t_ds_task_definition_log_key_idx_process_code_version;-- ALTER TABLE `t_ds_task_definition_log` ADD INDEX `idx_code_version` (`code`,`version`) USING BTREE;
drop PROCEDURE if EXISTS add_t_ds_task_definition_log_key_idx_code_version;
delimiter d//
CREATE PROCEDURE add_t_ds_task_definition_log_key_idx_code_version()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_task_definition_log'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='idx_code_version')THEN
ALTER TABLE `t_ds_task_definition_log` ADD INDEX `idx_code_version` (`code`,`version`) USING BTREE;
END IF;
END;
d//
delimiter ;
CALL add_t_ds_task_definition_log_key_idx_code_version;
DROP PROCEDURE add_t_ds_task_definition_log_key_idx_code_version;-- alter table t_ds_task_definition_log add `task_group_id` int(11) DEFAULT NULL COMMENT 'task group id' AFTER `resource_ids`;
drop PROCEDURE if EXISTS add_t_ds_task_definition_log_col_task_group_id;
delimiter d//
CREATE PROCEDURE add_t_ds_task_definition_log_col_task_group_id()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME='t_ds_task_definition_log'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME='task_group_id')THEN
alter table t_ds_task_definition_log add `task_group_id` int(11) DEFAULT NULL COMMENT 'task group id' AFTER `resource_ids`;
END IF;
END;
d//
delimiter ;
CALL add_t_ds_task_definition_log_col_task_group_id;
DROP PROCEDURE add_t_ds_task_definition_log_col_task_group_id;-- alter table t_ds_task_definition_log add `task_group_id` int(11) DEFAULT NULL COMMENT 'task group id' AFTER `resource_ids`;
drop PROCEDURE if EXISTS add_t_ds_task_definition_col_task_group_id;
delimiter d//
CREATE PROCEDURE add_t_ds_task_definition_col_task_group_id()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME='t_ds_task_definition'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME='task_group_id')THEN
alter table t_ds_task_definition add `task_group_id` int DEFAULT NULL COMMENT 'task group id';
END IF;
END;
d//
delimiter ;
CALL add_t_ds_task_definition_col_task_group_id;
DROP PROCEDURE add_t_ds_task_definition_col_task_group_id;-- alter table t_ds_task_definition_log add `task_group_priority` int(11) DEFAULT NULL COMMENT 'task group id' AFTER `task_group_id`;
drop PROCEDURE if EXISTS add_t_ds_task_definition_log_col_task_group_priority;
delimiter d//
CREATE PROCEDURE add_t_ds_task_definition_log_col_task_group_priority()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME='t_ds_task_definition_log'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME='task_group_priority')THEN
alter table t_ds_task_definition_log add `task_group_priority` tinyint DEFAULT '0' COMMENT 'task group priority' AFTER `task_group_id`;
END IF;
END;
d//
delimiter ;
CALL add_t_ds_task_definition_log_col_task_group_priority;
DROP PROCEDURE add_t_ds_task_definition_log_col_task_group_priority;-- alter table t_ds_task_definition add `task_group_priority` int(11) DEFAULT '0' COMMENT 'task group id' AFTER `task_group_id`;
drop PROCEDURE if EXISTS add_t_ds_task_definition_col_task_group_priority;
delimiter d//
CREATE PROCEDURE add_t_ds_task_definition_col_task_group_priority()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME='t_ds_task_definition'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME='task_group_priority')THEN
alter table t_ds_task_definition add `task_group_priority` tinyint DEFAULT '0' COMMENT 'task group priority' AFTER `task_group_id`;
END IF;
END;
d//
delimiter ;
CALL add_t_ds_task_definition_col_task_group_priority;
DROP PROCEDURE add_t_ds_task_definition_col_task_group_priority;-- ALTER TABLE `t_ds_user` ADD COLUMN `time_zone` varchar(32) DEFAULT NULL COMMENT 'time zone';
drop PROCEDURE if EXISTS add_t_ds_user_col_time_zone;
delimiter d//
CREATE PROCEDURE add_t_ds_user_col_time_zone()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME='t_ds_user'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME='time_zone')THEN
ALTER TABLE `t_ds_user` ADD COLUMN `time_zone` varchar(32) DEFAULT NULL COMMENT 'time zone';
END IF;
END;
d//
delimiter ;
CALL add_t_ds_user_col_time_zone;
DROP PROCEDURE add_t_ds_user_col_time_zone;-- ALTER TABLE `t_ds_alert` ADD COLUMN `warning_type` tinyint(4) DEFAULT '2' COMMENT '1 process is successfully, 2 process/task is failed';
drop PROCEDURE if EXISTS add_t_ds_alert_col_warning_type;
delimiter d//
CREATE PROCEDURE add_t_ds_alert_col_warning_type()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME='t_ds_alert'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME='warning_type')THEN
ALTER TABLE `t_ds_alert` ADD COLUMN `warning_type` tinyint(4) DEFAULT '2' COMMENT '1 process is successfully, 2 process/task is failed';
END IF;
END;
d//
delimiter ;
CALL add_t_ds_alert_col_warning_type;
DROP PROCEDURE add_t_ds_alert_col_warning_type;-- ALTER TABLE `t_ds_alert` ADD INDEX `idx_status` (`alert_status`) USING BTREE;
drop PROCEDURE if EXISTS add_t_ds_alert_idx_idx_status;
delimiter d//
CREATE PROCEDURE add_t_ds_alert_idx_idx_status()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICSWHERE TABLE_NAME='t_ds_alert'AND TABLE_SCHEMA=(SELECT DATABASE())AND INDEX_NAME='idx_status')THEN
ALTER TABLE `t_ds_alert` ADD INDEX `idx_status` (`alert_status`) USING BTREE;
END IF;
END;
d//
delimiter ;
CALL add_t_ds_alert_idx_idx_status;
DROP PROCEDURE add_t_ds_alert_idx_idx_status;-- ALTER TABLE `t_ds_alert` ADD COLUMN `project_code` bigint DEFAULT NULL COMMENT 'project_code';
-- ALTER TABLE `t_ds_alert` ADD COLUMN `process_definition_code` bigint DEFAULT NULL COMMENT 'process_definition_code';
-- ALTER TABLE `t_ds_alert` ADD COLUMN `process_instance_id` int DEFAULT NULL COMMENT 'process_instance_id';
-- ALTER TABLE `t_ds_alert` ADD COLUMN `alert_type` int DEFAULT NULL COMMENT 'alert_type';
drop PROCEDURE if EXISTS add_t_ds_alert_col_project_code;
delimiter d//
CREATE PROCEDURE add_t_ds_alert_col_project_code()
BEGINIF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME='t_ds_alert'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME='project_code')THEN
ALTER TABLE `t_ds_alert` ADD COLUMN `project_code` bigint DEFAULT NULL COMMENT 'project_code';
ALTER TABLE `t_ds_alert` ADD COLUMN `process_definition_code` bigint DEFAULT NULL COMMENT 'process_definition_code';
ALTER TABLE `t_ds_alert` ADD COLUMN `process_instance_id` int DEFAULT NULL COMMENT 'process_instance_id';
ALTER TABLE `t_ds_alert` ADD COLUMN `alert_type` int DEFAULT NULL COMMENT 'alert_type';
END IF;
END;
d//
delimiter ;
# CALL add_t_ds_alert_col_project_code;
DROP PROCEDURE add_t_ds_alert_col_project_code;-- t_ds_task_instance
drop PROCEDURE if EXISTS alter_t_ds_task_instance_col_log_path;
delimiter d//
CREATE PROCEDURE alter_t_ds_task_instance_col_log_path()
BEGINIF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME='t_ds_task_instance'AND TABLE_SCHEMA=(SELECT DATABASE())AND COLUMN_NAME='log_path')THEN
ALTER TABLE `t_ds_task_instance` MODIFY COLUMN `log_path` longtext DEFAULT NULL COMMENT 'task log path';
END IF;
END;
d//
delimiter ;
CALL alter_t_ds_task_instance_col_log_path;
DROP PROCEDURE alter_t_ds_task_instance_col_log_path;--
-- Table structure for table `t_ds_dq_comparison_type`
--
DROP TABLE IF EXISTS `t_ds_dq_comparison_type`;
CREATE TABLE `t_ds_dq_comparison_type` (`id` int(11) NOT NULL AUTO_INCREMENT,`type` varchar(100) NOT NULL,`execute_sql` text DEFAULT NULL,`output_table` varchar(100) DEFAULT NULL,`name` varchar(100) DEFAULT NULL,`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,`is_inner_source` tinyint(1) DEFAULT '0',PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;--
-- Table structure for table t_ds_dq_execute_result
--
DROP TABLE IF EXISTS `t_ds_dq_execute_result`;
CREATE TABLE `t_ds_dq_execute_result` (`id` int(11) NOT NULL AUTO_INCREMENT,`process_definition_id` int(11) DEFAULT NULL,`process_instance_id` int(11) DEFAULT NULL,`task_instance_id` int(11) DEFAULT NULL,`rule_type` int(11) DEFAULT NULL,`rule_name` varchar(255) DEFAULT NULL,`statistics_value` double DEFAULT NULL,`comparison_value` double DEFAULT NULL,`check_type` int(11) DEFAULT NULL,`threshold` double DEFAULT NULL,`operator` int(11) DEFAULT NULL,`failure_strategy` int(11) DEFAULT NULL,`state` int(11) DEFAULT NULL,`user_id` int(11) DEFAULT NULL,`comparison_type` int(11) DEFAULT NULL,`error_output_path` text DEFAULT NULL,`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;--
-- Table structure for table t_ds_dq_rule
--
DROP TABLE IF EXISTS `t_ds_dq_rule`;
CREATE TABLE `t_ds_dq_rule` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(100) DEFAULT NULL,`type` int(11) DEFAULT NULL,`user_id` int(11) DEFAULT NULL,`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;--
-- Table structure for table t_ds_dq_rule_execute_sql
--
DROP TABLE IF EXISTS `t_ds_dq_rule_execute_sql`;
CREATE TABLE `t_ds_dq_rule_execute_sql` (`id` int(11) NOT NULL AUTO_INCREMENT,`index` int(11) DEFAULT NULL,`sql` text DEFAULT NULL,`table_alias` varchar(255) DEFAULT NULL,`type` int(11) DEFAULT NULL,`is_error_output_sql` tinyint(1) DEFAULT '0',`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;--
-- Table structure for table t_ds_dq_rule_input_entry
--
DROP TABLE IF EXISTS `t_ds_dq_rule_input_entry`;
CREATE TABLE `t_ds_dq_rule_input_entry` (`id` int(11) NOT NULL AUTO_INCREMENT,`field` varchar(255) DEFAULT NULL,`type` varchar(255) DEFAULT NULL,`title` varchar(255) DEFAULT NULL,`value` varchar(255)  DEFAULT NULL,`options` text DEFAULT NULL,`placeholder` varchar(255) DEFAULT NULL,`option_source_type` int(11) DEFAULT NULL,`value_type` int(11) DEFAULT NULL,`input_type` int(11) DEFAULT NULL,`is_show` tinyint(1) DEFAULT '1',`can_edit` tinyint(1) DEFAULT '1',`is_emit` tinyint(1) DEFAULT '0',`is_validate` tinyint(1) DEFAULT '1',`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;--
-- Table structure for table t_ds_dq_task_statistics_value
--
DROP TABLE IF EXISTS `t_ds_dq_task_statistics_value`;
CREATE TABLE `t_ds_dq_task_statistics_value` (`id` int(11) NOT NULL AUTO_INCREMENT,`process_definition_id` int(11) DEFAULT NULL,`task_instance_id` int(11) DEFAULT NULL,`rule_id` int(11) NOT NULL,`unique_code` varchar(255) NULL,`statistics_name` varchar(255) NULL,`statistics_value` double NULL,`data_time` datetime DEFAULT NULL,`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;--
-- Table structure for table t_ds_relation_rule_execute_sql
--
DROP TABLE IF EXISTS `t_ds_relation_rule_execute_sql`;
CREATE TABLE `t_ds_relation_rule_execute_sql` (`id` int(11) NOT NULL AUTO_INCREMENT,`rule_id` int(11) DEFAULT NULL,`execute_sql_id` int(11) DEFAULT NULL,`create_time` datetime NULL,`update_time` datetime NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;--
-- Table structure for table t_ds_relation_rule_input_entry
--
DROP TABLE IF EXISTS `t_ds_relation_rule_input_entry`;
CREATE TABLE `t_ds_relation_rule_input_entry` (`id` int(11) NOT NULL AUTO_INCREMENT,`rule_id` int(11) DEFAULT NULL,`rule_input_entry_id` int(11) DEFAULT NULL,`values_map` text DEFAULT NULL,`index` int(11) DEFAULT NULL,`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Table structure for t_ds_k8s
-- ----------------------------
DROP TABLE IF EXISTS `t_ds_k8s`;
CREATE TABLE `t_ds_k8s` (`id` int(11) NOT NULL AUTO_INCREMENT,`k8s_name` varchar(100) DEFAULT NULL,`k8s_config` text DEFAULT NULL,`create_time` datetime DEFAULT NULL COMMENT 'create time',`update_time` datetime DEFAULT NULL COMMENT 'update time',PRIMARY KEY (`id`)
) ENGINE= INNODB AUTO_INCREMENT= 1 DEFAULT CHARSET= utf8;-- ----------------------------
-- Table structure for t_ds_k8s_namespace
-- ----------------------------
DROP TABLE IF EXISTS `t_ds_k8s_namespace`;
CREATE TABLE `t_ds_k8s_namespace` (`id` int(11) NOT NULL AUTO_INCREMENT,`limits_memory` int(11) DEFAULT NULL,`namespace` varchar(100) DEFAULT NULL,`online_job_num` int(11) DEFAULT NULL,`user_id` int(11) DEFAULT NULL,`pod_replicas` int(11) DEFAULT NULL,`pod_request_cpu` decimal(14,3) DEFAULT NULL,`pod_request_memory` int(11) DEFAULT NULL,`limits_cpu` decimal(14,3) DEFAULT NULL,`k8s` varchar(100) DEFAULT NULL,`create_time` datetime DEFAULT NULL COMMENT 'create time',`update_time` datetime DEFAULT NULL COMMENT 'update time',PRIMARY KEY (`id`),UNIQUE KEY `k8s_namespace_unique` (`namespace`,`k8s`)
) ENGINE= INNODB AUTO_INCREMENT= 1 DEFAULT CHARSET= utf8;-- ----------------------------
-- Table structure for t_ds_relation_namespace_user
-- ----------------------------
DROP TABLE IF EXISTS `t_ds_relation_namespace_user`;
CREATE TABLE `t_ds_relation_namespace_user` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'key',`user_id` int(11) NOT NULL COMMENT 'user id',`namespace_id` int(11) DEFAULT NULL COMMENT 'namespace id',`perm` int(11) DEFAULT '1' COMMENT 'limits of authority',`create_time` datetime DEFAULT NULL COMMENT 'create time',`update_time` datetime DEFAULT NULL COMMENT 'update time',PRIMARY KEY (`id`),UNIQUE KEY `namespace_user_unique` (`user_id`,`namespace_id`)
) ENGINE=InnoDB AUTO_INCREMENT= 1 DEFAULT CHARSET= utf8;-- ----------------------------
-- Table structure for t_ds_alert_send_status
-- ----------------------------
DROP TABLE IF EXISTS t_ds_alert_send_status;
CREATE TABLE t_ds_alert_send_status (`id`                            int(11) NOT NULL AUTO_INCREMENT,`alert_id`                      int(11) NOT NULL,`alert_plugin_instance_id`      int(11) NOT NULL,`send_status`                   tinyint(4) DEFAULT '0',`log`                           text,`create_time`                   datetime DEFAULT NULL COMMENT 'create time',PRIMARY KEY (`id`),UNIQUE KEY `alert_send_status_unique` (`alert_id`,`alert_plugin_instance_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;-- ----------------------------
-- Table structure for t_ds_audit_log
-- ----------------------------
DROP TABLE IF EXISTS `t_ds_audit_log`;
CREATE TABLE `t_ds_audit_log` (`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT'key',`user_id` int(11) NOT NULL COMMENT 'user id',`resource_type` int(11) NOT NULL COMMENT 'resource type',`operation` int(11) NOT NULL COMMENT 'operation',`time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'create time',`resource_id` int(11) NULL DEFAULT NULL COMMENT 'resource id',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT= 1 DEFAULT CHARSET=utf8;-- ----------------------------
-- Table structure for t_ds_task_group
-- ----------------------------
DROP TABLE IF EXISTS `t_ds_task_group`;
CREATE TABLE `t_ds_task_group` (`id`  int(11)  NOT NULL AUTO_INCREMENT COMMENT'key',`name` varchar(100) DEFAULT NULL COMMENT 'task_group name',`description` varchar(200) DEFAULT NULL,`group_size` int (11) NOT NULL COMMENT'group size',`use_size` int (11) DEFAULT '0' COMMENT 'used size',`user_id` int(11) DEFAULT NULL COMMENT 'creator id',`project_code` bigint(20) DEFAULT 0 COMMENT 'project code',`status` tinyint(4) DEFAULT '1' COMMENT '0 not available, 1 available',`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY(`id`)
) ENGINE= INNODB AUTO_INCREMENT= 1 DEFAULT CHARSET= utf8;-- ----------------------------
-- Table structure for t_ds_task_group_queue
-- ----------------------------
DROP TABLE IF EXISTS `t_ds_task_group_queue`;
CREATE TABLE `t_ds_task_group_queue` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT'key',`task_id` int(11) DEFAULT NULL COMMENT 'taskintanceid',`task_name` varchar(100) DEFAULT NULL COMMENT 'TaskInstance name',`group_id`  int(11) DEFAULT NULL COMMENT 'taskGroup id',`process_id` int(11) DEFAULT NULL COMMENT 'processInstace id',`priority` int(8) DEFAULT '0' COMMENT 'priority',`status` tinyint(4) DEFAULT '-1' COMMENT '-1: waiting  1: running  2: finished',`force_start` tinyint(4) DEFAULT '0' COMMENT 'is force start 0 NO ,1 YES',`in_queue` tinyint(4) DEFAULT '0' COMMENT 'ready to get the queue by other task finish 0 NO ,1 YES',`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY( `id` )
)ENGINE= INNODB AUTO_INCREMENT= 1 DEFAULT CHARSET= utf8;ALTER TABLE t_ds_process_instance ADD`next_process_instance_id` int(11) DEFAULT '0' COMMENT 'serial queue next processInstanceId';
ALTER TABLE t_ds_process_instance ADD `restart_time` datetime DEFAULT NULL COMMENT 'process instance restart time';
ALTER TABLE t_ds_process_definition ADD   `execution_type` tinyint(4) DEFAULT '0' COMMENT 'execution_type 0:parallel,1:serial wait,2:serial discard,3:serial priority';
ALTER TABLE t_ds_process_definition_log ADD   `execution_type` tinyint(4) DEFAULT '0' COMMENT 'execution_type 0:parallel,1:serial wait,2:serial discard,3:serial priority';

安装3.0.1 版本

具体安装参考官网,创建新库,这里不做介绍。

introduction (apache.org)

数据导入数据库

重点注意

次脚本导入时:

  • 调度 状态全设置为下线状态 定时表 中 t_ds_schedules release_state 全设置为0了,为了防止和原调度冲突,测试完成后需要手动上线即可。

  • worker 分组组信息需要重新设置,和原先保持一致即可。

  • 告警实例管理需要重新添加,然后在告警组管理中重新绑定。

#项目表
truncate table t_ds_project;insert into t_ds_project
select id,name,code,description,user_id,flag,create_time,update_time
from dolphin201.t_ds_project;#任务过程定义####唯一dag
truncate table t_ds_process_definition;insert into t_ds_process_definition
select id,code,name,version,description,project_code,release_state,user_id,global_params,flag,locations,warning_group_id,timeout,tenant_id,execution_type,create_time,update_time 
from dolphin201.t_ds_process_definition;#任务过程定义日志
truncate table t_ds_process_definition_log;insert into t_ds_process_definition_log
select t1.id,t1.code,t1.name,t1.version,t1.description,t1.project_code,t1.release_state,t1.user_id,t1.global_params,t1.flag,t1.locations,t1.warning_group_id,t1.timeout,t1.tenant_id,t1.execution_type,t1.operator,t1.operate_time,t1.create_time,t1.update_timefrom dolphin201.t_ds_process_definition_log t1inner join (select code, project_code, max(version) versionfrom dolphin201.t_ds_process_definition_loggroup by project_code, code) t2on t1.code = t2.code and t1.project_code = t2.project_code and t1.version = t2.version;###进行任务相关性表
truncate table t_ds_process_task_relation;insert into t_ds_process_task_relation
select id,name,project_code,process_definition_code,process_definition_version,pre_task_code,pre_task_version,post_task_code,post_task_version,condition_type,condition_params,create_time,update_time
from dolphin201.t_ds_process_task_relation;###进行任务相关性表日志
truncate table t_ds_process_task_relation_log;insert into t_ds_process_task_relation_log
select t3.id,t3.name,t3.project_code,t3.process_definition_code,t3.process_definition_version,t3.pre_task_code,t3.pre_task_version,t3.post_task_code,t3.post_task_version,t3.condition_type,t3.condition_params,t3.operator,t3.operate_time,t3.create_time,t3.update_time # from t_ds_process_task_relation;
from dolphin201.t_ds_process_task_relation_log t3inner join (select project_code,process_definition_code,post_task_code,max(process_definition_version) process_definition_version,max(post_task_version) AS       post_task_versionfrom dolphin201.t_ds_process_task_relation_loggroup by project_code, process_definition_code, post_task_code) t4on t3.project_code = t4.project_codeand t3.process_definition_code = t4.process_definition_codeand t3.post_task_code = t4.post_task_codeand t3.process_definition_version = t4.process_definition_versionand t3.post_task_version = t4.post_task_version
;###任务定义
truncate table t_ds_task_definition;insert into t_ds_task_definition
select id,code,name,version,description,project_code,user_id,task_type,task_params,flag,task_priority,worker_group,environment_code,fail_retry_times,fail_retry_interval,timeout_flag,timeout_notify_strategy,timeout,delay_time,resource_ids,task_group_id,task_group_priority,create_time,update_time
from dolphin201.t_ds_task_definition;###任务定义日志
truncate table t_ds_task_definition_log;insert into t_ds_task_definition_log
select t5.id,t5.code,t5.name,t5.version,t5.description,t5.project_code,t5.user_id,t5.task_type,t5.task_params,t5.flag,t5.task_priority,t5.worker_group,t5.environment_code,t5.fail_retry_times,t5.fail_retry_interval,t5.timeout_flag,t5.timeout_notify_strategy,t5.timeout,t5.delay_time,t5.resource_ids,t5.operator,t5.task_group_id,t5.task_group_priority,t5.operate_time,t5.create_time,t5.update_time
from dolphin201.t_ds_task_definition_log t5
;###定时计划
truncate table t_ds_schedules;insert into t_ds_schedules
select id,process_definition_code,start_time,end_time,timezone_id,crontab,failure_strategy,user_id,'0' AS release_state,warning_type,warning_group_id,process_instance_priority,worker_group,environment_code,create_time,update_time
from dolphin201.t_ds_schedules;###告警组truncate table t_ds_alertgroup;insert into t_ds_alertgroupselect id,alert_instance_ids,create_user_id,group_name,description,create_time,update_timefrom dolphin201.t_ds_alertgroup;#
# ###告警组信息  ,这张表信息有冲突故不导入,后续自己配置下
# truncate table t_ds_alert_plugin_instance;# insert into t_ds_alert_plugin_instance
# select id, plugin_define_id, plugin_instance_params, create_time, update_time, instance_name
# from dolphin201.t_ds_alert_plugin_instance;###用户
truncate table t_ds_user;insert into t_ds_user
select id,user_name,user_password,user_type,email,phone,tenant_id,create_time,update_time,queue,state,time_zone
from dolphin201.t_ds_user;###租户
truncate table t_ds_tenant;insert into t_ds_tenant
select id,tenant_code,description,queue_id,create_time,update_time
from dolphin201.t_ds_tenant;####资源中心
truncate table t_ds_resources;insert into t_ds_resources
select id,alias,file_name,description,user_id,type,size,create_time,update_time,pid,full_name,is_directory
from dolphin201.t_ds_resources;####数据源
truncate table t_ds_datasource;insert into t_ds_datasource
select id,name,note,type,user_id,connection_params,create_time,update_time
from dolphin201.t_ds_datasource;###环境情况
truncate table t_ds_environment;insert into t_ds_environment
select id,code,name,config,description,operator,create_time,update_time
from dolphin201.t_ds_environment;

遇到问题和解决方案

任务无法打开

file

如直接使用官网任务脚本会报次错误,保存可以直接看日志,报错的原因是由于字段缺少导致的,上面ddl语句中已经添加相关字段语句。

出现少量任务无法保存问题

主要原因主键冲突造成的!!!

最简单解决方案: 重新复制一个任务,在新任务中进行更改保存

用户授权的任务需要进行重新授权。

本文由 白鲸开源科技 提供发布支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/770996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看漫画学Python:有趣好玩

书籍介绍 Python是一门既简单又强大的编程语言&#xff0c;被广泛应用于数据分析、大数据、网络爬虫、自动化运维、科学计算和人工智能等领域。Python也越来越重要&#xff0c;成为国家计算机等级考试科目&#xff0c;某些中小学也开设了Python编程课程。本书秉承有趣、有料、…

【linux网络(一)】初识网络, 理解四层网络模型

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux网络 1. 前言2. 初识网络…

Android开发简易登录界面

title: Android开发第四天 search: 2024-03-22 tags: Android开发 Android开发简易登录界面 文章目录 Android开发简易登录界面一、定义style样式二、完成 activity_main.xml 界面具体设计三、代码简述 背景 &#xff1a;在初学 android 开发的时候&#xff0c;为了尽量熟悉学…

使用下SAP HANA强大的Cloud控制台

前言 SAP的HANA数据库(注:这里指是云平台版本,不是platform的本地部署版本)的版本发布,基本上每个季度都有一次发布。2024年的第一个版本内部已经Release了,很快就会推到生产环境当中。当前要发布的版本是:2024.2.6 (QRC 1/2024)。而且每个版本的维护周期最长不会超过7…

Arduino+ESP8266+华为云物联网平台实现智能开关

前言 最近在做一个物联网项目&#xff0c;涉及到智能开关的开发。目前已经实现简单的TCP通信远程控制&#xff0c;但是考虑到后期的设备管理以及设备通信所需要的技术和服务器的维护成本&#xff0c;我决定将设备接入云平台。本文将详细阐述如何利用华为云的物联网平台&#x…

DB-GPT安装部署使用初体验

DB-GPT是什么&#xff1f;引自官网&#xff1a; DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。 目的是构建大模型领域的基础设施&#xff0c;通过开发多模型管理(SMMF)、…

【ssh连接】奇奇怪怪报错记录

gitlab配置ssh连接&#xff0c;先跟着教程生成密钥&#xff0c;上传公钥&#xff0c;将服务器信息存入config文件&#xff0c;但是ssh连接超时&#xff0c;很急&#xff0c;想用服务器&#xff0c;各种搜索尝试&#xff0c;搞了两三天别的什么都没干&#xff0c;还是没解决&…

【Canvas与艺术】淡蓝辉光汽车速度仪表盘

【关键点】 内圈处渐变色的采用。 【效果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>淡蓝辉光汽车速度仪表盘</t…

谈谈消息队列

这篇文章我们来聊聊消息队列。我一直在想&#xff0c;能不能用一篇文章就把消息队列的所有内容给串联起来。然后&#xff0c;之后每次看到这篇文章的时候&#xff0c;我就能够立马回忆起来这个大知识的所有知识点。所以我想尝试一下用这种长文的方式&#xff0c;将我自己对于消…

Ubuntu系统设置静态固定IP保姆级教程

1、查看网络接口信息 ifconfig 首先需要确认要设置固定IP的网络接口。在大多数情况下&#xff0c;这通常是ens33 2、查看路由网关信息 route -n # 查看打印 路由表 网关地址 3、备份文件 为了防止防止出现意外问题。Ubuntu中的网络配置文件通常存储在/etc/netplan/目录下&…

微服务概述

微服务 概述1.单体架构2.分布式架构3.微服务的架构特征&#xff1a; 服务拆分和远程调用提供者与消费者 概述 1.单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署。 单体架构的优缺点如下&#xff1a; 优点&#xff1a; 架构…

RPA使用Native Messaging 协议实现浏览器自动化

RPA 即机器人流程自动化&#xff0c;是一种利用软件机器人或人工智能来自动化业务流程中规则性、重复性任务的技术。RPA 技术可以模拟和执行人类在计算机上的交互操作&#xff0c;从而实现自动化处理数据、处理交易、触发通知等任务。帮助企业或个人实现业务流程的自动化和优化…

【Unity人机交互】人工智能之爬虫开章

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

2015年认证杯SPSSPRO杯数学建模B题(第一阶段)替换式密码全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 B题 替换式密码 原题再现&#xff1a; 历史上有许多密码的编制方法。较为简单的是替换式密码&#xff0c;也就是将文中出现的字符一对一地替换成其它的符号。对拼音文字而言&#xff0c;最简单的形式是单字母替换加密&#xff0c;也就是以每个…

金蝶云星空和管易云·奇门单据接口对接

金蝶云星空和管易云奇门单据接口对接 ​​ ​​ 对接源平台:管易云奇门 管易云是上海管易云计算软件有限公司旗下的专注提供电商企业管理软件服务的品牌&#xff0c;总部位于中国上海张江高科技产业园区。管易云旗下拥有管易云C-ERP、EC-OMS、EC-WMS、B2C/B2B/BBC/微商城开发…

速通数据结构第二站 顺序表

文章目录 速通数据结构与算法系列 1 速通数据结构与算法第一站 复杂度 http://t.csdnimg.cn/sxEGF 感谢佬们支持&#xff01; 目录 系列文章目录 前言一、顺序表 0 结构体 1 接口声明 2 初始化和销毁 3 扩容函数 4 打印和判空 5 尾插 …

基于51单片机的拔河游戏Proteus仿真

地址&#xff1a;https://pan.baidu.com/s/18LMEo-_WYcoyTOkWYJ0NUg 提取码&#xff1a;1234 仿真图&#xff1a; 1&#xff09;设计一个能进行拔河游戏的电路&#xff0c;通过按键控制游戏开始和复位。 2&#xff09;电路使用9个发光二极管排成一行&#xff0c;中间的LED为拔…

ElasticSearch之数据建模

写在前面 本文看下es数据建模相关的内容。 1&#xff1a;什么是数据建模 数据建模是对真实数据的一种抽象&#xff0c;最终映射为计算机形式的表现。其包括如下三个阶段&#xff1a; 1&#xff1a;概念模型 2&#xff1a;逻辑模型 3&#xff1a;数据模型2&#xff1a;es数据…

python爬虫基础-----运算符(第三天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

纹理压缩算法

一、什么是纹理压缩 我们知道游戏中对于3D物体表面细节的表现最重要的还是靠贴图来实现的&#xff0c;那么越是高分辨率越是真彩色的贴图自然表现力也是越强&#xff0c;但是同时带来的问题是所需占用的内存会成倍的上升&#xff0c;而节省内存这一点在目前的游戏中还是非常非…