From 6ea01cad8c3f84a93d060cdbbd932ba941fba251 Mon Sep 17 00:00:00 2001 From: wtingkai <330445001@qq.com> Date: Wed, 4 Jun 2025 16:35:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(OmniAdvisor):=20=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E8=B0=83=E4=BC=98=E6=96=B9=E6=B3=95=E6=97=A0=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=8E=A8=E8=8D=90=E6=97=B6=E7=9A=84=E5=BC=82=E5=B8=B8=E6=8A=9B?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- omniadvisor/src/omniadvisor/interface/config_tuning.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/omniadvisor/src/omniadvisor/interface/config_tuning.py b/omniadvisor/src/omniadvisor/interface/config_tuning.py index 8142f7309..24723db97 100644 --- a/omniadvisor/src/omniadvisor/interface/config_tuning.py +++ b/omniadvisor/src/omniadvisor/interface/config_tuning.py @@ -183,7 +183,12 @@ def main(): return if args.tuning_method or args.retest_way == OA_CONF.RetestWay.hijacking: - unified_tuning(load, args.retest_way, args.tuning_method) + try: + unified_tuning(load, args.retest_way, args.tuning_method) + except NoOptimalConfigError: + global_logger.error( + 'The tuning method: %s cannot find optimal config, please try other method.', args.tuning_method + ) return # 当且仅当后台复测,且未指定调优方法时,会连续拉起调优 -- Gitee From 652a3875ce3f898e4e518aa15b20de5229927062 Mon Sep 17 00:00:00 2001 From: wtingkai <330445001@qq.com> Date: Wed, 4 Jun 2025 17:33:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(OmniAdvisor):=20=E5=88=B7=E6=96=B0READ?= =?UTF-8?q?ME=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=A1=B9=E7=9B=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- omniadvisor/README.md | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/omniadvisor/README.md b/omniadvisor/README.md index 5c28773eb..63d26af5a 100755 --- a/omniadvisor/README.md +++ b/omniadvisor/README.md @@ -1,17 +1,43 @@ -1 历史数据库初始化 +## 项目结构 + +``` +# 项目结构 +root +├── config/ # 配置目录 +│ ├── common_config.cfg # 通用配置文件 +│ └── spark_repo.json # 调优参数空间文件 +├── docs/ # 文档目录 +├── logs/ # log文件生成目录 +├── script/ # 脚本目录 +│ └── spark-submit # Spark submit脚本,用于替换实现任务劫持 +├── src/ # 源代码目录 +│ ├── init.py # 初始化入口 +│ ├── hijack.py # 任务劫持入口 +│ └── tuning.py # 负载调优入口 +├── tests/ # 测试目录 +├── pyproject.toml # 构建文件 +└── READEME # README说明 +``` + +## 使用说明 + +### 1 历史数据库初始化 + 初始化数据库,数据库用于存储调优过程与负载执行过程。若之前执行过初始化过程,则此处可以跳过。 - ① 进入`omniadvisor/src/`目录下。 - ② 顺序执行以下命令:`python init.py makemigrations`和`python init.py migrate`,初始化数据库 - ③ 执行命令`python init.py createsuperuser`创建超级用户,并按指示设置用户名和密码。 -2 启动历史数据库服务 +### 2 启动历史数据库服务 + 完成数据库初始化后,即可启动历史数据库,并通过Web端查看数据库内数据 - ① 执行命令`python init.py runserver 0.0.0.0:8000`启动数据库,其中`0.0.0.0`应替换为实际节点IP。 - ② 登录Web管理页面:`localhost:8000/admin/`,`localhost`替换实际的IP地址,并通过初始化过程中的用户名和密码登录。 -3 负载劫持 +### 3 负载劫持 + 首先要对用户负载进行劫持,获取用户负载及相关信息,以便后续能够调优。使能负载劫持,步骤如下: - ① 修改 spark-submit 脚本(位于`omniadvisor/script/`目录下),将 `hijack_path` 值修改为 `hijack.py` 文件(位于`omniadvisor/src/`目录下)绝对路径 @@ -19,13 +45,15 @@ - ③ 启用环境变量:`export enable_omniadvisor=true` 说明:完成以上步骤之后,用户下发相同的负载,会劫持用户的命令,并替换用户配置为系统推荐的最优的配置(初始状态下保持用户的默认配置)。推荐配置若执行失败,则退化为用户的默认配置 -4 查询负载信息 +### 4 查询负载信息 + 执行负载并劫持之后,在后台管理页面查看到相关信息 - ① 登录后台管理页面:`localhost:8000/admin/` - ② 切到Loads页面,即可查询看到负载信息 -5 启用调优 +### 5 启用调优 + 通过在根目录下,执行 `python tuning.py --help` 查看各参数说明 - ① 各参数的详细介绍 -- Gitee