diff --git a/omniadvisor/README.md b/omniadvisor/README.md index 5c28773eb68f3923a5feb6bff8bfa5ce2810a242..63d26af5a1c95a8ab134c7b732cfc4d6dbba5d57 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` 查看各参数说明 - ① 各参数的详细介绍 diff --git a/omniadvisor/src/omniadvisor/interface/config_tuning.py b/omniadvisor/src/omniadvisor/interface/config_tuning.py index 8142f730960355fa11909e9677d3be0f33674ffe..24723db97654f9b6bda1ee03a53578710433bccd 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 # 当且仅当后台复测,且未指定调优方法时,会连续拉起调优