hive基本概念
hive簡介
hive是什么
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供類SQL查詢功能。
為什么使用hive
1)簡單易上手。提供了類sql查詢語言HQL,提供快速開發的能力。
2)避免了去寫MapReduce,減少開發人員的學習成本。
3)統一的元數據管理(HCalalog)。可與pig,presto等共享。
4)為超大數據集設計的計算/擴展能力。MR作為計算引擎,HDFS作為存儲系統。
hive的特點
-
可擴展
Hive可以自由的擴展集群的規模,一般情況下不需要重啟服務。 -
延展性
Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。 -
容錯
良好的容錯性,節點出現問題SQL仍可完成執行。
hive的系統架構
hive基本組成
1)用戶接口
- CLI,JDBC/ODBC,WebUI
2)元數據存儲(matastore)
- 默認存儲在自帶的數據庫derby中,線上使用時一般換為MySQL
3)驅動器(Driver)
- 解析器,編譯器,優化器,執行器
4)Hadoop
- 用MR計算,用HDFS存儲
hive各組件基本功能
-
用戶接口主要由三個:CLI、JDBC/ODBC和WebGUI。其中,CLI為shell命令行;JDBC/ODBC是Hive的JAVA實現,與傳統數據庫JDBC類似;WebGUI是通過瀏覽器訪問Hive
-
元數據存儲:Hive 將元數據存儲在數據庫中。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。
-
解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計划的生成。生成的查詢計划存儲在 HDFS 中,並在隨后有 MapReduce 調用執行。
Hive與SQL的比較
1)查詢語言
- hive使用類SQL的HQL
- sql使用sql
2)數據存儲位置
- hive是將數據存儲在HDFS中
- sql可以將數據保存在塊設備或者本地文件系統中
3)數據格式
- Hive 中沒有定義專門的數據格式,數據格式可以由用戶指定,用戶定義數據格式需要指定三個屬性:列分隔符(通常為空格、”\t”、”\x001″)、行分隔符(”\n”)以及讀取文件數據的方法(Hive 中默認有三個文件格式 TextFile,SequenceFile 以及 RCFile)
- 數據庫中,不同的數據庫有不同的存儲引擎,定義了自己的數據格式
4)數據更新
- Hive 中不支持對數據的改寫和添加,所有的數據都是在加載的時候中確定好的
- sql支持數據更新
5)執行延遲
- hive延遲性高
- sql延遲性低
6)擴展性
- hive擴展性好
- sql擴展性有限
7)索引
- hive和sql都支持索引
8)分區
hive和sql都支持分區
hive的數據存儲
-
hive的所有數據存儲基於hadoop的HDFS,hive沒有專門的數據存儲格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
-
在創建表時,指定Hive 數據的列分隔符和行分隔符,Hive 就可以解析數據
-
存儲結構主要包括:數據庫、文件、表、視圖、索引
-
Hive 中包含以下數據模型:DB、Table,External Table,Partition,Bucket
1) db:在hdfs中表現為${hive.metastore.warehouse.dir}目錄下一個文件夾
2) table:在hdfs中表現所屬db目錄下一個文件夾
3) external table:外部表, 與table類似,不過其數據存放位置可以在任意指定路徑。普通表:刪除表后,hdfs上的文件都刪了;外部表刪除后, hdfs上的文件沒有刪除, 只是把文件刪除了
4) partition:在hdfs中表現為table目錄下的子目錄
5) bucket:桶, 在hdfs中表現為同一個表目錄下根據hash散列之后的多個文件, 會根據不同的文件把數據放到不同的文件中