我需要在Apache Hive中挂钩自定义执行挂钩。如果有人知道该怎么做,请告诉我。
我正在使用的当前环境如下:
Hadoop:Cloudera版本4.1.2
作业系统:Centos
谢谢,
阿伦
最佳答案
根据要在哪个阶段注入(inject)自定义代码,挂钩有几种类型:
如果运行脚本,则处理流程如下所示:
HiveDriverRunHook.preDriverRun()
(HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS
)AbstractSemanticAnalyzerHook.preAnalyze()
(HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK
)AbstractSemanticAnalyzerHook.postAnalyze()
(HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK
)ExecuteWithHookContext.run()
(HiveConf.ConfVars.PREEXECHOOKS
)ClientStatsPublisher.run()
被调用以发布统计信息(
HiveConf.ConfVars.CLIENTSTATSPUBLISHERS
)如果任务失败:
ExecuteWithHookContext.run()
(HiveConf.ConfVars.ONFAILUREHOOKS
)ExecuteWithHookContext.run()
(HiveConf.ConfVars.POSTEXECHOOKS
)HiveDriverRunHook.postDriverRun()
(HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS
)对于每个挂钩,我都指出了必须实现的接口(interface)。在方括号中
有相应的conf。支柱。您必须设置才能注册
脚本开头的类(class)。
例如:设置PreExecution挂钩(工作流程的第9阶段)
HiveConf.ConfVars.PREEXECHOOKS -> hive.exec.pre.hooks :
set hive.exec.pre.hooks=com.example.MyPreHook;
不幸的是,这些功能并未真正记录,但是您始终可以查看Driver类以查看挂钩的评估顺序。
备注:我在这里假设Hive为0.11.0,我不认为Cloudera发行版
不同(太多)