2013-07-04 98 views
1

我需要在Apache Hive中掛鉤自定義執行鉤子。請讓我知道如果有人知道如何做到這一點。Hive執行鉤子

我使用的當前環境中給出如下:

的Hadoop:Cloudera的版本4.1.2 操作系統:Centos的

感謝, 阿倫

回答

17

有幾種類型取決於掛鉤您想在哪個階段注入您的自定義代碼:

  • 驅動程序運行掛鉤(前/後)
  • 語義analyizer掛鉤(前/後)
  • 執行掛鉤(前/故障/後)
  • 客戶端統計出版社

如果你運行一個腳本的處理流程看起來像如下:

  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. 返回結果。

對於每個鉤子,我指出了您必須實現的接口。在括號 中有相應的conf。支柱。鍵,您必須設置爲在腳本的開頭註冊 類。 E.g:設置執行前鉤(工作流程的第9級)

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

不幸的是這些功能是不是真的記錄,但你總是可以窺視Driver類看掛鉤的計算順序。

備註:我認爲這裏蜂巢0.11.0,我不認爲Cloudera的分佈 不同(太多)

+0

非常感謝@Lorand彎曲。它確實有助於實現:) –

+0

只是爲了記錄,HiveDriverRunHook不適用於大多數已部署的配置單元版本:https://issues.apache.org/jira/browse/HIVE-14343 – tribbloid