1. 程式人生 > >hive基礎

hive基礎

分享 htm 4.2 讀取 color caption arc .com ole

1. Hive是什麽

Hive是基於Hadoop的數據倉庫解決方案。由於Hadoop本身在數據存儲和計算方面有很好的可擴展性和高容錯性,因此使用Hive構建的數據倉庫也秉承了這些特性。

這是來自官方的解釋。

簡單來說,Hive就是在Hadoop上架了一層SQL接口,可以將SQL翻譯成MapReduce去Hadoop上執行,這樣就使得數據開發和分析人員很方便的使用SQL來完成海量數據的統計和分析,而不必使用編程語言開發MapReduce那麽麻煩。

先上一張經典的Hive架構圖:

技術分享圖片

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基礎