hive基礎
1. Hive是什麽
Hive是基於Hadoop的數據倉庫解決方案。由於Hadoop本身在數據存儲和計算方面有很好的可擴展性和高容錯性,因此使用Hive構建的數據倉庫也秉承了這些特性。
這是來自官方的解釋。
簡單來說,Hive就是在Hadoop上架了一層SQL接口,可以將SQL翻譯成MapReduce去Hadoop上執行,這樣就使得數據開發和分析人員很方便的使用SQL來完成海量數據的統計和分析,而不必使用編程語言開發MapReduce那麽麻煩。
先上一張經典的Hive架構圖:
如圖中所示,Hive通過給用戶提供的一系列交互接口,接收到用戶的指令(SQL),使用自己的Driver,結合元數據(MetaStore),將這些指令翻譯成MapReduce,提交到Hadoop中執行,最後,將執行返回的結果輸出到用戶交互接口。
在使用過程中,至需要將Hive看做是一個數據庫就行,本身Hive也具備了數據庫的很多特性和功能。
2. Hive擅長什麽
Hive可以使用HQL(Hive SQL)很方便的完成對海量數據的統計匯總,即查詢和分析,除了很多內置的函數,還支持開發人員使用其他編程語言和腳本語言來自定義函數。
但是,由於Hadoop本身是一個批處理,高延遲的計算框架,Hive使用Hadoop作為執行引擎,自然也就有了批處理,高延遲的特點,在數據量很小的時候,Hive執行也需要消耗較長時間來完成,這時候,就顯示不出它與Oracle,Mysql等傳統數據庫的優勢。
此外,Hive對事務的支持不夠好,原因是HDFS本身就設計為一次寫入,多次讀取的分布式存儲系統,因此,不能使用Hive來完成諸如DELETE、UPDATE等在線事務處理的需求。
因此,Hive擅長的是非實時的、離線的、對響應及時性要求不高的海量數據批量計算,即席查詢,統計分析。
3. Hive的數據單元
- Databases:數據庫。概念等同於關系型數據庫的Schema;
- Tables:表。概念等同於關系型數據庫的表;
- Partitions:分區。概念類似於關系型數據庫的表分區,沒有那麽多分區類型,只支持固定分區,將同一組數據存放至一個固定的分區中。
- Buckets (or Clusters):分桶。同一個分區內的數據還可以細分,將相同的KEY再劃分至一個桶中,這個有點類似於HASH分區,只不過這裏是HASH分桶,也有點類似子分區吧。
4. Hive的數據類型
既然是被當做數據庫來使用,除了數據單元,Hive當然也得有一些列的數據類型。
4.1 原始數據類型
- 整型
- TINYINT — 微整型,只占用1個字節,只能存儲0-255的整數。
- SMALLINT– 小整型,占用2個字節,存儲範圍–32768 到 32767。
- INT– 整型,占用4個字節,存儲範圍-2147483648到2147483647。
- BIGINT– 長整型,占用8個字節,存儲範圍-2^63到2^63-1。
- 布爾型
- BOOLEAN — TRUE/FALSE
- 浮點型
- FLOAT– 單精度浮點數。
- DOUBLE– 雙精度浮點數。
- 字符串型
- STRING– 不設定長度。
4.2 復合數據類型
- Structs:一組由任意數據類型組成的結構。比如,定義一個字段C的類型為STRUCT {a INT; b STRING},則可以使用a和C.b來獲取其中的元素值;
- Maps:和Java中的Map沒什麽區別,就是存儲K-V對的;
- Arrays:就是數組而已;
轉自:http://lxw1234.com/archives/2015/06/238.htm
hive基礎