Hive中Beeline提交的SQL查詢同Hive客戶端提交的SQL查詢處理流程有何異同?
05-25
如題,據我所知,Beeline是通過JDBC向Thrift-Server提交查詢請求。
Hive客戶端是通過自己的Driver來提交。但接下來的流程,希望有對源碼比較熟悉的同學能幫忙梳理一下。
我沒讀過代碼,不過你可以參考下面這張圖:(圖片來源:http://infolab.stanford.edu/~ragho/hive-icde2010.pdf)
- JDBC和ODBC連接都是通過Thrift Server來接入,然後發送給Driver
- 而CLI(Beeline也一樣)是直接與Driver直接與Driver交互
貼一張Hive的架構圖吧:
(圖片來源:https://cwiki.apache.org/confluence/display/Hive/Design)而後面做的事情包括:- 詞法分析/語法分析
- 使用antlr將SQL語句解析成抽象語法樹
- 語義分析
- 從Megastore獲取模式信息,驗證SQL語句中隊表名,列名,以及數據類型的檢查和隱式轉換
- 邏輯計劃生成
- 生成邏輯計劃--運算元樹
- 邏輯計劃優化
- 對算字數進行優化,包括列剪枝,分區剪枝,謂詞下推等
- 物理計劃生成
- 將邏輯計劃生成包含由MapReduce任務組成的DAG的物理計劃
- 物理計劃執行
- 將DAG發送到Hadoop集群進行執行
這些都是沒有區別的。
1、hive客戶端是在本地做sql的編譯,然後將hql翻譯成mr任務提交到hadoop。而beeline實際上是對SQLLine的封裝,實際上是調用hiveserver2來進行查詢的。
2、從許可權控制角度來講,目前hive的許可權控制有兩種,一種是基於對應hdfs操作許可權的控制機制(Storage Based Authorization in the Metastore Server),一種是符合SQL規範的控制機制(SQL Standards Based Authorization in HiveServer2),前者適合於提供給RD的許可權控制(可以防止別人誤刪你的表),後者適合於提供給hive的BI用戶的許可權控制(可以控制到表或欄位可見級別)。後者更細緻,更符合數據倉庫的許可權控制。但是後者只能用在beeline方式下,不能用在命令行中。
3、hive推薦使用beeline
一個走rpc,一個本進程內調用啊
推薦閱讀:
※揭秘:去中心化分散式系統的好與壞
※使用Apache Zookeeper分散式部署PHP應用程序
※hadoop偽分散式環境如何搭建