1

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

我正在使用的当前环境如下所示:

Hadoop:Cloudera 4.1.2 版操作系统:Centos

谢谢,阿伦

4

2 回答 2

18

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

  • 驱动程序运行挂钩(前/后)
  • 语义分析器钩子(前/后)
  • 执行挂钩(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 分布不同(太多)

于 2013-07-04T12:30:15.313 回答
0

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

有例子...

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

于 2019-03-08T15:09:39.300 回答