1. 程式人生 > 其它 >Hive面試題(未完待續...)

Hive面試題(未完待續...)

Hive架構

 

 

1. 使用者介面:Client CLI(command-line interface)、JDBC/ODBC(jdbc訪問hive)

2. 元資料:Metastore 元資料包括:表名、表所屬的資料庫(預設是default)、表的擁有者、列/分割槽欄位、表的型別(是否 是外部表)、表的資料所在目錄等; 預設儲存在自帶的derby資料庫中,推薦使用MySQL儲存Metastore。

3. Hadoop 使用HDFS進行儲存,使用MapReduce進行計算。

4. 驅動器:Driver

(1)解析器(SQL Parser):將SQL字串轉換成抽象語法樹AST,這一步一般都用第三方工具庫完 成,比如antlr;對AST進行語法分析,比如表是否存在、欄位是否存在、SQL語義是否有誤。

(2)編譯器(Physical Plan):將AST編譯生成邏輯執行計劃。

(3)優化器(Query Optimizer):對邏輯執行計劃進行優化。

(4)執行器(Execution):把邏輯執行計劃轉換成可以執行的物理計劃。對於Hive來說,就是 MR/Spark。

Hive執行原理

Hive通過給使用者提供的一系列互動介面,接收到使用者的指令(SQL),使用自己的Driver,結合元資料 (MetaStore),將這些指令翻譯成MapReduce,提交到Hadoop中執行,最後,將執行返回的結果輸出 到使用者互動介面。 其實,還可以這樣理解:Hive要做的就是將SQL翻譯成MapReduce程式程式碼。實際上,Hive內建了很多 Operator,每個Operator完成一個特定的計算過程,Hive將這些Operator構造成一個有向無環圖 DAG,然後根據這些Operator之間是否存在shuffle將其封裝到map或者reduce函式中,之後就可以提 交給MapReduce執行了。

內部表與外部表

不同點

1 外部表不會載入資料到Hive,減少資料傳輸、資料還能共享。 共享的理解就是:當我們刪除一個內部表時,Hive 也會刪除這個表中資料。內部表不適合和其他工具共享資料。

2 Hive建立內部表時,會將資料移動到資料倉庫指向的路徑。 建立外部表時,僅記錄資料所在的路徑,不對資料的位置做任何改變。 在刪除表的時候,內部表的元資料和資料會被一起刪除,而外部表只刪除元資料,不刪除資料。這樣外部表相對來說更加安全些,資料組織也更加靈活,方便共享源資料。