Hive Hooks介紹


Hive作為SQL on Hadoop最穩定、應用最廣泛的查詢引擎被大家所熟知。但是由於基於MapReduce,查詢執行速度太慢而逐步引入其他的近實時查詢引擎如Presto等。值得關注的是Hive目前支持MapReduce、Tez和Spark三種執行引擎,同時Hive3也會支持聯邦數據查詢的功能。所以Hive還是有很大進步的空間的。

當然,諸如SparkSQL和Presto有着他們非常合適的應用場景,我們的底層也是會有多種查詢引擎存在,以應對不同業務場景的數據查詢服務。但是由於查詢引擎過多也會導致用戶使用體驗不好,需要用戶掌握多種查詢引擎,而且要明確知道各個引擎的適用場景。而且多種SQL引擎各自提供服務會對數據倉庫建設過程中的血緣管理、權限管理、資源利用都帶來較大的困難。

之前對於底層平台的統一SQL服務有考慮過在上層提供一層接口封裝,進行SQL校驗、血緣管理、引擎推薦、查詢分發等等,但是各個引擎之間的語法差異較大,想要實現兼容的SQL層有點不太現實。最近看了快手分享的《SQL on Hadoop 在快手大數據平台的實踐與優化》,覺得有那么點意思。大家有興趣的話可以看一看。

其實快手的實現核心邏輯是一樣的,有一個統一的SQL入口,提供SQL校驗,SQL存儲、引擎推薦、查詢分發進而實現血緣管理等。優秀的是它基於Hive完成了上述工作,將Hive作為統一的入口而不是重新包裝一層。既利用了HiveServer2的架構,又做到了對於用戶的感知最小。而實現這些功能的基礎就是Hive Hooks,也就是本篇的重點。

Hook是一種在處理過程中攔截事件,消息或函數調用的機制。 Hive hooks是綁定到了Hive內部的工作機制,無需重新編譯Hive。所以Hive Hook提供了使用hive擴展和集成外部功能的能力。 我們可以通過Hive Hooks在查詢處理的各個步驟中運行/注入一些代碼,幫助我們實現想要實現的功能。

根據鈎子的類型,它可以在查詢處理期間的不同點調用:

Pre-semantic-analyzer hooks:在Hive在查詢字符串上運行語義分析器之前調用。

Post-semantic-analyzer hooks:在Hive在查詢字符串上運行語義分析器之后調用。

Pre-driver-run hooks:在driver執行查詢之前調用。

Post-driver-run hooks:在driver執行查詢之后調用。

Pre-execution hooks:在執行引擎執行查詢之前調用。請注意,這個目的是此時已經為Hive准備了一個優化的查詢計划。

Post-execution hooks:在查詢執行完成之后以及將結果返回給用戶之前調用。

Failure-execution hooks:當查詢執行失敗時調用。

由以上的Hive Hooks我們都可以得出Hive SQL執行的生命周期了,而Hive Hooks則完整的貫穿了Hive查詢的整個生命周期。

對於Hive Hooks有了初步理解之后,后面我們會通過示例介紹如何實現一個Hive Hook,並且嘗試一下如何基於Hive實現統一的SQL查詢服務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM