我需要在apachehive中钩住一个定制的执行钩子。如果有人知道怎么做,请告诉我。我目前使用的环境如下:hadoop:cloudera版本4.1.2操作系统:centos谢谢,阿伦
fslejnso1#
好的开始-->http://dharmeshkakadia.github.io/hive-hook/有一些例子。。。注意:来自控制台的hivecli显示消息如果您从hue执行,添加一个记录器,您可以在hiveserver2 log role中看到结果。
a14dhokn2#
根据要在哪个阶段注入自定义代码,有几种类型的钩子:驾驶员运行挂钩(前/后)语义分析器挂钩(前/后)执行挂钩(前/失败/后)客户端统计发布程序如果运行脚本,处理流程如下所示:driver.run()接受命令 HiveDriverRunHook.preDriverRun() ( HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS )compile()开始处理命令:创建抽象语法树 AbstractSemanticAnalyzerHook.preAnalyze() ( HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK )语义分析 AbstractSemanticAnalyzerHook.postAnalyze() ( HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK )创建并验证查询计划(物理计划)driver.execute():准备运行作业 ExecuteWithHookContext.run() ( HiveConf.ConfVars.PREEXECHOOKS )execdriver.execute()运行所有作业对于每个hiveconf.confvars.hivecounterspullinterval间隔的每个作业: ClientStatsPublisher.run() 调用以发布统计信息( HiveConf.ConfVars.CLIENTSTATSPUBLISHERS )如果任务失败: ExecuteWithHookContext.run() ( HiveConf.ConfVars.ONFAILUREHOOKS )完成所有任务 ExecuteWithHookContext.run() ( HiveConf.ConfVars.POSTEXECHOOKS )在返回结果之前 HiveDriverRunHook.postDriverRun() ( HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS )返回结果。对于每个钩子,我都指出了必须实现的接口。括号中有相应的conf.prop。为了在脚本的开头注册类,必须设置密钥。e、 g:设置预执行挂钩(工作流的第9阶段)
HiveDriverRunHook.preDriverRun()
HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS
AbstractSemanticAnalyzerHook.preAnalyze()
HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK
AbstractSemanticAnalyzerHook.postAnalyze()
ExecuteWithHookContext.run()
HiveConf.ConfVars.PREEXECHOOKS
ClientStatsPublisher.run()
HiveConf.ConfVars.CLIENTSTATSPUBLISHERS
HiveConf.ConfVars.ONFAILUREHOOKS
HiveConf.ConfVars.POSTEXECHOOKS
HiveDriverRunHook.postDriverRun()
HiveConf.ConfVars.PREEXECHOOKS -> hive.exec.pre.hooks : set hive.exec.pre.hooks=com.example.MyPreHook;
不幸的是,这些特性并没有真正的文档化,但是您可以随时查看驱动程序类来查看钩子的求值顺序。备注:我在这里假设了hive0.11.0,我不认为cloudera的分布有什么不同(太多)
2条答案
按热度按时间fslejnso1#
好的开始-->http://dharmeshkakadia.github.io/hive-hook/
有一些例子。。。
注意:来自控制台的hivecli显示消息如果您从hue执行,添加一个记录器,您可以在hiveserver2 log role中看到结果。
a14dhokn2#
根据要在哪个阶段注入自定义代码,有几种类型的钩子:
驾驶员运行挂钩(前/后)
语义分析器挂钩(前/后)
执行挂钩(前/失败/后)
客户端统计发布程序
如果运行脚本,处理流程如下所示:
driver.run()接受命令
HiveDriverRunHook.preDriverRun()
(HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS
)compile()开始处理命令:创建抽象语法树
AbstractSemanticAnalyzerHook.preAnalyze()
(HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK
)语义分析
AbstractSemanticAnalyzerHook.postAnalyze()
(HiveConf.ConfVars.SEMANTIC_ANALYZER_HOOK
)创建并验证查询计划(物理计划)
driver.execute():准备运行作业
ExecuteWithHookContext.run()
(HiveConf.ConfVars.PREEXECHOOKS
)execdriver.execute()运行所有作业
对于每个hiveconf.confvars.hivecounterspullinterval间隔的每个作业:
ClientStatsPublisher.run()
调用以发布统计信息(
HiveConf.ConfVars.CLIENTSTATSPUBLISHERS
)如果任务失败:
ExecuteWithHookContext.run()
(HiveConf.ConfVars.ONFAILUREHOOKS
)完成所有任务
ExecuteWithHookContext.run()
(HiveConf.ConfVars.POSTEXECHOOKS
)在返回结果之前
HiveDriverRunHook.postDriverRun()
(HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS
)返回结果。
对于每个钩子,我都指出了必须实现的接口。括号中有相应的conf.prop。为了在脚本的开头注册类,必须设置密钥。e、 g:设置预执行挂钩(工作流的第9阶段)
不幸的是,这些特性并没有真正的文档化,但是您可以随时查看驱动程序类来查看钩子的求值顺序。
备注:我在这里假设了hive0.11.0,我不认为cloudera的分布有什么不同(太多)