Hive多SQL任务参数采样过程超时杀任务后解析出2条日志

问题信息

表1 问题的基本信息

信息名称

信息内容

问题来源

网上维护

产品大类

鲲鹏BoostKit

产品子类

大数据

业务场景

调试运行

组件分类

其他

输出时间

2024/4/22

案例作者

伍锐恒

所属团队

鲲鹏BoostKit

评审结果

评审通过

评审时间

2024/5/10

发布时间

2024/6/30

关键字

Hive多SQL任务参数采样过程超时杀任务后解析出2条日志

归属文档

OmniAdvisor 特性指南

问题现象描述

当Hive多SQL任务在进行参数采样时,若任务运行时间超过了当前数据库中最佳参数执行时间的两倍时,会触发Kill任务逻辑。由于Tez机制原因,被Kill掉的DAG有小概率会重新拉起一个新的任务,在这种情况下老的采样任务可能会出现只存在部分SQL的DAG且为执行成功的状态,此时日志解析有小概率解析到两条任务,其中一条为部分SQL的成功任务。

在配置identification为application_name时,会认为这个不全的成功任务为该调优任务较优的参数,导致推荐出较慢的参数。

此时观察timeline server界面,可见被Kill的任务和自行重新拉起的任务。

关键过程、根本原因分析

结论、解决方案及效果

当参数调优配置“$OMNIADVISOR_HOME/BoostKit-omniadvisor_1.1.0/config/common_config.cfg”文件配置项中的identification_type为默认值job_hash时,该任务匹配会失败,不影响参数调优,继续进行采样和推荐即可。

当identification_type为application_name时,需要进入数据库中清理异常数据,详情请见下列操作。

  1. 在Yarn Timeline的Web页面或者参数调优日志输出“yarn app -kill”后续的字样中查询到被kill的任务id,假设为killed_app_id,任务的application_name假设为app_name。
  2. 进入MySQL数据库中,选择对应的数据库

    # 输入账号密码进入MySQL
    mysql -uuser -ppassword
    
    # 选择使用的database
    use hive_test;

  3. 从历史任务表history_config中删除被Kill的任务的解析内容。

    DELETE FROM history_config WHERE application_id='killed_app_id';

  4. 从历史任务表history_config中选择当前最优的参数更新到最优任务表best_config中。

    UPDATE best_config
    SET 
        parameters = subquery.parameters,
        duration_time = subquery.duration_time
    FROM (
        SELECT parameters, duration_time
        FROM history_config
        WHERE application_name = 'app_name'
        ORDER BY duration_time ASC
        LIMIT 1
    ) AS subquery
    WHERE best_config.application_name = 'app_name';

  5. 继续进行参数采样或者参数推荐即可。