我需要在Apache Hive中挂钩自定义执行挂钩。如果有人知道怎么做,请告诉我。
我正在使用的当前环境如下:
Hadoop:Cloudera版本4.1.2操作系统:Centos
谢谢,阿伦
根据您要注入自定义代码的阶段,有几种类型的挂钩:
如果您运行脚本,则处理流程如下所示:
HiveDriverRunHook.preDriverRun()
(Qazxswpoi)HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS
(Qazxswpoi)AbstractSemanticAnalyzerHook.preAnalyze()
(Qazxswpoi)HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK
(Qazxswpoi)AbstractSemanticAnalyzerHook.postAnalyze()
被要求发布统计数据
(HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK
)
如果任务失败:ExecuteWithHookContext.run()
(HiveConf.ConfVars.PREEXECHOOKS
)ClientStatsPublisher.run()
(Qazxswpoi)HiveConf.ConfVars.CLIENTSTATSPUBLISHERS
(ExecuteWithHookContext.run()
)对于每个钩子,我指出了你必须实现的接口。在括号中有相应的conf。支柱。您必须设置的密钥才能在脚本的开头注册该类。例如:设置PreExecution挂钩(工作流程的第9个阶段)
HiveConf.ConfVars.ONFAILUREHOOKS
遗憾的是,这些功能并未真正记录,但您可以随时查看ExecuteWithHookContext.run()
类以查看钩子的评估顺序。
备注:我在这里假设Hive 0.11.0,我不认为Cloudera分布不同(太多)
一个好的开始 - > HiveConf.ConfVars.POSTEXECHOOKS
有例子......
注意:来自控制台的hive cli显示消息,如果从hue执行,添加记录器,您可以在hiveserver2日志角色中查看结果。