Hive执行钩子

时间:2013-07-04 04:34:20

标签: hadoop hive bigdata cloudera

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

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

Hadoop:Cloudera 4.1.2版 操作系统:Centos

谢谢, 阿伦

2 个答案:

答案 0 :(得分:18)

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

  • 驱动程序运行挂钩(前/后)
  • 语义分析器挂钩(前/后)
  • 执行挂钩(预/失败/发布)
  • 客户统计发布商

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

  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. 之前
  16. 返回结果。
  17. 对于每个钩子,我都指出了你必须实现的接口。在括号中 有相应的conf。支柱。你必须设置密钥才能注册 脚本开头的类。 例如:设置PreExecution挂钩(工作流程的第9个阶段)

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

    不幸的是,这些功能并没有真正记录,但您可以随时查看Driver类以查看钩子的评估顺序。

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

答案 1 :(得分:0)

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

有例子...

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