【问题标题】:Hive execution hookHive 执行钩子
【发布时间】:2025-12-05 23:10:02
【问题描述】:

我需要在 Apache Hive 中挂钩自定义执行挂钩。如果有人知道该怎么做,请告诉我。

我目前使用的环境如下:

Hadoop:Cloudera 版本 4.1.2 操作系统:Centos

谢谢, 阿伦

【问题讨论】:

    标签: hadoop hive bigdata cloudera


    【解决方案1】:

    根据您要在哪个阶段注入自定义代码,有几种类型的钩子:

    • 驱动程序运行挂钩(前/后)
    • 语义分析器挂钩(前/后)
    • 执行挂钩(Pre/Failure/Post)
    • 客户统计发布者

    如果您运行脚本,处理流程如下所示:

    1. Driver.run() 接受命令
    2. HiveDriverRunHook.preDriverRun()
      (HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS)
    3. Driver.compile() 开始处理命令:创建抽象语法树
    4. AbstractSemanticAnalyzerHook.preAnalyze()
      (HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK)
    5. 语义分析
    6. AbstractSemanticAnalyzerHook.postAnalyze()
      (HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK)
    7. 创建并验证查询计划(物理计划)
    8. Driver.execute():准备运行作业
    9. ExecuteWithHookContext.run()
      (HiveConf.ConfVars.PREEXECHOOKS)
    10. ExecDriver.execute() 运行所有作业
    11. 对于每个 HiveConf.ConfVars.HIVECOUNTERSPULLINTERVAL 间隔的每个作业:
      调用ClientStatsPublisher.run() 来发布统计信息
      (HiveConf.ConfVars.CLIENTSTATSPUBLISHERS)
      如果任务失败:ExecuteWithHookContext.run()
      (HiveConf.ConfVars.ONFAILUREHOOKS)
    12. 完成所有任务
    13. ExecuteWithHookContext.run()
      (HiveConf.ConfVars.POSTEXECHOOKS)
    14. 返回结果之前HiveDriverRunHook.postDriverRun()
      (HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS)
    15. 返回结果。

    对于每个钩子,我都指出了您必须实现的接口。在括号中 有相应的conf。支柱。您必须设置的密钥才能注册 类在脚本的开头。 例如:设置 PreExecution 挂钩(工作流程的第 9 阶段)

    HiveConf.ConfVars.PREEXECHOOKS -> hive.exec.pre.hooks :
    set hive.exec.pre.hooks=com.example.MyPreHook;
    

    很遗憾,这些功能并未真正记录在案,但您始终可以查看 Driver 类以查看挂钩的评估顺序。

    备注:我在这里假设 Hive 0.11.0,我不认为 Cloudera 发行版 不同(太多)

    【讨论】:

    【解决方案2】:

    一个好的开始 --> http://dharmeshkakadia.github.io/hive-hook/

    有例子……

    注意:如果您从 hue 执行,来自控制台的 hive cli 会显示消息,添加一个记录器,您可以在 hiveserver2 日志角色中看到结果。

    【讨论】: