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數組
Hive:由Facebook開源用於解決海量結構化日誌的數據統計。瀏覽器
Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張表,並提供類SQL查詢功能。oracle
本質是:將HQL轉化成MapReduce程序
Hive處理的數據儲存在HDFS
Hive分析數據的底層實現是MapReduce
執行程序運行在Yan上
1) 操做接口採用類SQL語法,提供快速開發的能力(簡單、容易上手)。
2) 避免了去寫MapReduce,減小開發人員的學習成本。
3) Hive的執行延遲比較高,所以Hive經常使用於數據分析,對實時性要求不高的場合。
4) Hive優點在於處理大數據,對於處理小數據沒有優點,由於Hive的執行延遲比較
1.Hive的HQL表達能力有限
(1)迭代式算法沒法表達
(2)數據挖掘方面不擅長
2.Hive的效率比較低
(1)Hive自動生成的MapReduce做業,一般狀況下不夠智能化
(2)Hive調優比較困難,粒度較粗
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中執行,最後,將執行返回的結果輸出到用戶交互接口。
因爲 Hive 採用了相似SQL 的查詢語言 HQL(Hive Query Language),所以很容易將 Hive 理解爲數據庫。其實從結構上來看,Hive 和數據庫除了擁有相似的查詢語言,再無相似之處。本文將從多個方面來闡述 Hive 和數據庫的差別。數據庫能夠用在 Online 的應用中,可是Hive 是爲數據倉庫而設計的,清楚這一點,有助於從應用角度理解 Hive 的特性。
因爲SQL被普遍的應用在數據倉庫中,所以,專門針對Hive的特性設計了類SQL的查詢語言HQL。熟悉SQL開發的開發者能夠很方便的使用Hive進行開發。
Hive 是創建在 Hadoop 之上的,全部 Hive 的數據都是存儲在 HDFS 中的。而數據庫則能夠將數據保存在塊設備或者本地文件系統中。
因爲Hive是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。所以,Hive中不建議對數據的改寫,全部的數據都是在加載的時候肯定好的。而數據庫中的數據一般是須要常常進行修改的,所以可使用 INSERT INTO … VALUES 添加數據,使用 UPDATE … SET修改數據。
Hive在加載數據的過程當中不會對數據進行任何處理,甚至不會對數據進行掃描,所以也沒有對數據中的某些Key創建索引。Hive要訪問數據中知足條件的特定值時,須要暴力掃描整個數據,所以訪問延遲較高。因爲 MapReduce 的引入, Hive 能夠並行訪問數據,所以即便沒有索引,對於大數據量的訪問,Hive 仍然能夠體現出優點。數據庫中,一般會針對一個或者幾個列創建索引,所以對於少許的特定條件的數據的訪問,數據庫能夠有很高的效率,較低的延遲。因爲數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。
Hive中大多數查詢的執行是經過 Hadoop 提供的 MapReduce 來實現的。而數據庫一般有本身的執行引擎。
Hive 在查詢數據的時候,因爲沒有索引,須要掃描整個表,所以延遲較高。另一個致使 Hive 執行延遲高的因素是 MapReduce框架。因爲MapReduce 自己具備較高的延遲,所以在利用MapReduce 執行Hive查詢時,也會有較高的延遲。相對的,數據庫的執行延遲較低。固然,這個低是有條件的,即數據規模較小,當數據規模大到超過數據庫的處理能力的時候,Hive的並行計算顯然能體現出優點。
因爲Hive是創建在Hadoop之上的,所以Hive的可擴展性是和Hadoop的可擴展性是一致的(世界上最大的Hadoop 集羣在 Yahoo!,2009年的規模在4000 臺節點左右)。而數據庫因爲 ACID 語義的嚴格限制,擴展行很是有限。目前最早進的並行數據庫 Oracle 在理論上的擴展能力也只有100臺左右。
因爲Hive創建在集羣上並能夠利用MapReduce進行並行計算,所以能夠支持很大規模的數據;對應的,數據庫能夠支持的數據規模較小。
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 |
|
字節數組 |
|
數據類型 |
描述 |
語法示例 |
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() |