我需要在 Apache Hive 中挂钩自定义执行挂钩。如果有人知道该怎么做,请告诉我。
我当前使用的环境如下:
Hadoop:Cloudera 版本 4.1.2
操作系统:Centos
谢谢,
阿伦
有多种类型的挂钩,具体取决于您要在哪个阶段注入自定义代码:
- 驱动程序运行挂钩(前/后)
- 语义分析器挂钩(前/后)
- 执行挂钩(前/失败/后)
- 客户统计发布者
如果运行脚本,处理流程如下所示:
- Driver.run() 接受命令
-
HiveDriverRunHook.preDriverRun()
(HiveConf.ConfVars.HIVE_DRIVER_RUN_HOOKS
)
- Driver.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。支柱。您必须设置密钥才能注册
脚本开头的类。
例如:设置 PreExecution 挂钩(工作流程的第九阶段)
HiveConf.ConfVars.PREEXECHOOKS -> hive.exec.pre.hooks :
set hive.exec.pre.hooks=com.example.MyPreHook;
不幸的是,这些功能并没有真正记录下来,但您可以随时查看Driver http://svn.apache.org/repos/asf/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/Driver.java类来查看钩子的评估顺序。
备注:我这里假设 Hive 0.11.0,我不认为 Cloudera 发行版
不同(太多)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)