Hive學習筆記

1 入門

1.Hive官網地址java

http://hive.apache.org/git

2.文檔查看地址github

https://cwiki.apache.org/confluence/display/Hive/GettingStarted算法

3.下載地址shell

http://archive.apache.org/dist/hive/數據庫

4.github地址apache

https://github.com/apache/hive數組

1.1 What's Hive?

Hive:由Facebook開源用於解決海量結構化日誌的數據統計。瀏覽器

Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張表,並提供類SQL查詢功能。oracle

本質是:將HQL轉化成MapReduce程序

Hive處理的數據儲存在HDFS

Hive分析數據的底層實現是MapReduce

執行程序運行在Yan上

 

1.2 Pros & Cons

1.2.1 Pros

1)       操做接口採用類SQL語法,提供快速開發的能力(簡單、容易上手)。

2)       避免了去寫MapReduce,減小開發人員的學習成本。

3)       Hive的執行延遲比較高,所以Hive經常使用於數據分析,對實時性要求不高的場合。

4)  Hive優點在於處理大數據,對於處理小數據沒有優點,由於Hive的執行延遲比較

1.2.2 Cons

1.Hive的HQL表達能力有限

  (1)迭代式算法沒法表達

  (2)數據挖掘方面不擅長

2.Hive的效率比較低

  (1)Hive自動生成的MapReduce做業,一般狀況下不夠智能化

  (2)Hive調優比較困難,粒度較粗

 

1.3 Architecture principle

 

1.用戶接口:Client

CLI(hive shell)、JDBC/ODBC(java訪問hive)、WEBUI(瀏覽器訪問hive)

2.元數據:Metastore

元數據包括:表名、表所屬的數據庫(默認是default)、表的擁有者、列/分區字段、表的類型(是不是外部表)、表的數據所在目錄等;

默認存儲在自帶的derby數據庫中,推薦使用MySQL存儲Metastore

3.Hadoop

使用HDFS進行存儲,使用MapReduce進行計算。

4.驅動器:Driver

(1)解析器(SQL Parser):將SQL字符串轉換成抽象語法樹AST,這一步通常都用第三方工具庫完成,好比antlr;對AST進行語法分析,好比表是否存在、字段是否存在、SQL語義是否有誤。

(2)編譯器(Physical Plan):將AST編譯生成邏輯執行計劃。

(3)優化器(Query Optimizer):對邏輯執行計劃進行優化。

(4)執行器(Execution):把邏輯執行計劃轉換成能夠運行的物理計劃。對於Hive來講,就是MR/Spark。

 

 

 

Hive經過給用戶提供的一系列交互接口,接收到用戶的指令(SQL),使用本身的Driver,結合元數據(MetaStore),將這些指令翻譯成MapReduce,提交到Hadoop中執行,最後,將執行返回的結果輸出到用戶交互接口。

1.4 Hive和數據庫比較

因爲 Hive 採用了相似SQL 的查詢語言 HQL(Hive Query Language),所以很容易將 Hive 理解爲數據庫。其實從結構上來看,Hive 和數據庫除了擁有相似的查詢語言,再無相似之處。本文將從多個方面來闡述 Hive 和數據庫的差別。數據庫能夠用在 Online 的應用中,可是Hive 是爲數據倉庫而設計的,清楚這一點,有助於從應用角度理解 Hive 的特性。

1.4.1 查詢語言

因爲SQL被普遍的應用在數據倉庫中,所以,專門針對Hive的特性設計了類SQL的查詢語言HQL。熟悉SQL開發的開發者能夠很方便的使用Hive進行開發。

1.4.2 數據存儲位置

Hive 是創建在 Hadoop 之上的,全部 Hive 的數據都是存儲在 HDFS 中的。而數據庫則能夠將數據保存在塊設備或者本地文件系統中。

1.4.3 數據更新

因爲Hive是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。所以,Hive中不建議對數據的改寫,全部的數據都是在加載的時候肯定好的。而數據庫中的數據一般是須要常常進行修改的,所以可使用 INSERT INTO …  VALUES 添加數據,使用 UPDATE … SET修改數據。

1.4.4 索引

Hive在加載數據的過程當中不會對數據進行任何處理,甚至不會對數據進行掃描,所以也沒有對數據中的某些Key創建索引。Hive要訪問數據中知足條件的特定值時,須要暴力掃描整個數據,所以訪問延遲較高。因爲 MapReduce 的引入, Hive 能夠並行訪問數據,所以即便沒有索引,對於大數據量的訪問,Hive 仍然能夠體現出優點。數據庫中,一般會針對一個或者幾個列創建索引,所以對於少許的特定條件的數據的訪問,數據庫能夠有很高的效率,較低的延遲。因爲數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。

1.4.5 執行

Hive中大多數查詢的執行是經過 Hadoop 提供的 MapReduce 來實現的。而數據庫一般有本身的執行引擎。

1.4.6 執行延遲

Hive 在查詢數據的時候,因爲沒有索引,須要掃描整個表,所以延遲較高。另一個致使 Hive 執行延遲高的因素是 MapReduce框架。因爲MapReduce 自己具備較高的延遲,所以在利用MapReduce 執行Hive查詢時,也會有較高的延遲。相對的,數據庫的執行延遲較低。固然,這個低是有條件的,即數據規模較小,當數據規模大到超過數據庫的處理能力的時候,Hive的並行計算顯然能體現出優點。

1.4.7 可擴展性

因爲Hive是創建在Hadoop之上的,所以Hive的可擴展性是和Hadoop的可擴展性是一致的(世界上最大的Hadoop 集羣在 Yahoo!,2009年的規模在4000 臺節點左右)。而數據庫因爲 ACID 語義的嚴格限制,擴展行很是有限。目前最早進的並行數據庫 Oracle 在理論上的擴展能力也只有100臺左右。

1.4.8 數據規模

因爲Hive創建在集羣上並能夠利用MapReduce進行並行計算,所以能夠支持很大規模的數據;對應的,數據庫能夠支持的數據規模較小。

 

2 Hive數據類型

2.1  基本數據類型

Hive數據類型

Java數據類型

長度

例子

TINYINT

byte

1byte有符號整數

20

SMALINT

short

2byte有符號整數

20

INT

int

4byte有符號整數

20

BIGINT

long

8byte有符號整數

20

BOOLEAN

boolean

布爾類型,true或者false

TRUE  FALSE

FLOAT

float

單精度浮點數

3.14159

DOUBLE

double

雙精度浮點數

3.14159

STRING

string

字符系列。能夠指定字符集。可使用單引號或者雙引號。

‘now is the time’ 「for all good men」

TIMESTAMP

 

時間類型

 

BINARY

 

字節數組

 

 

2.2 集合數據類型

數據類型

描述

語法示例

STRUCT

和c語言中的struct相似,均可以經過「點」符號訪問元素內容。例如,若是某個列的數據類型是STRUCT{first STRING, last STRING},那麼第1個元素能夠經過字段.first來引用。

struct()

MAP

MAP是一組鍵-值對元組集合,使用數組表示法能夠訪問數據。例如,若是某個列的數據類型是MAP,其中鍵->值對是’first’->’John’和’last’->’Doe’,那麼能夠經過字段名[‘last’]獲取最後一個元素

map()

ARRAY

數組是一組具備相同類型和名稱的變量的集合。這些變量稱爲數組的元素,每一個數組元素都有一個編號,編號從零開始。例如,數組值爲[‘John’, ‘Doe’],那麼第2個元素能夠經過數組名[1]進行引用。

Array()

 

 

相關文章
相關標籤/搜索