什麼是Hive
Hive 是建立在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL ),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。Hive 定義了簡單的類 SQL 查詢語言,稱爲 QL ,它允許熟悉 SQL 的用戶查詢數據。同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 無法完成的複雜的分析工作。
Hive是SQL解析引擎,它將SQL語句轉譯成M/R Job然後在Hadoop執行。
Hive的表其實就是HDFS的目錄/文件,按表名把文件夾分開。如果是分區表,則分區值是子文件夾,可以直接在M/R Job裏使用這些數據。
Hive的系統架構
•用戶接口,包括 CLI,JDBC/ODBC,WebUI
•元數據存儲,通常是存儲在關係數據庫如 mysql, derby 中
•解釋器、編譯器、優化器、執行器
•Hadoop:用 HDFS 進行存儲,利用 MapReduce 進行計算
hive的系統架構圖如下圖所示:
用戶接口主要有三個:CLI,JDBC/ODBC和 WebUI
CLI,即Shell命令行
JDBC/ODBC 是 Hive 的Java,與使用傳統數據庫JDBC的方式類似
WebGUI是通過瀏覽器訪問 Hive
Hive 將元數據存儲在數據庫中(metastore),目前只支持 mysql、derby。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否爲外部表等),表的數據所在目錄等
解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃(plan)的生成。生成的查詢計劃存儲在 HDFS 中,並在隨後MapReduce 調用執行
Hive 的數據存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(包含 * 的查詢,比如 select * from table 不會生成 MapRedcue 任務)