Hive簡介
1.什么是Hive
Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供類SQL查詢功能。
其本質是將SQL轉換為MapReduce的任務進行運算,底層由HDFS來提供數據的存儲,說白了hive可以理解為一個將SQL轉換為MapReduce的任務的工具,甚至更進一步可以說hive就是一個MapReduce的客戶端
為什么使用Hive
Ø 直接使用hadoop所面臨的問題
人員學習成本太高
項目周期要求太短
MapReduce實現復雜查詢邏輯開發難度太大
Ø 為什么要使用Hive
操作接口采用類SQL語法,提供快速開發的能力。
避免了去寫MapReduce,減少開發人員的學習成本。
功能擴展很方便。
Hive的特點
Ø 可擴展
Hive可以自由的擴展集群的規模,一般情況下不需要重啟服務。
Ø 延展性
Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。
Ø 容錯
良好的容錯性,節點出現問題SQL仍可完成執行。
2.Hive架構
架構圖
基本組成
用戶接口:包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)為shell命令行;JDBC/ODBC是Hive的JAVA實現,與傳統數據庫JDBC類似;WebGUI是通過瀏覽器訪問Hive。
元數據存儲:通常是存儲在關系數據庫如MySQL/derby中。Hive 將元數據存儲在數據庫中。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。
解釋器、編譯器、優化器、執行器:完成HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在HDFS 中,并在隨后有MapReduce 調用執行。
3.Hive與Hadoop的關系
Hive利用HDFS存儲數據,利用MapReduce查詢分析數據
4.Hive與傳統數據庫對比
hive用于海量數據的離線數據分析
總結:hive具有sql數據庫的外表,但應用場景完全不同,hive只適合用來做批量數據統計分析
5.Hive的數據存儲
(1) Hive中所有的數據都存儲在 HDFS 中,沒有專門的數據存儲格式(可支持Text,SequenceFile,ParquetFile,ORC格式RCFILE等)
SequenceFile是hadoop中的一種文件格式:
文件內容是以序列化的kv對象來組織的
(2)只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據。
(3)Hive 中包含以下數據模型:DB、Table,External Table,Partition,Bucket。
Ø db:在hdfs中表現為${hive.metastore.warehouse.dir}目錄下一個文件夾
Ø table:在hdfs中表現所屬db目錄下一個文件夾
Ø external table:與table類似,不過其數據存放位置可以在任意指定路徑
Ø partition:在hdfs中表現為table目錄下的子目錄
Ø bucket:在hdfs中表現為同一個表目錄下根據hash散列之后的多個文件