總目錄:http://www.reibang.com/p/e406a9bc93a9
Hadoop - 子目錄:http://www.reibang.com/p/9428e443b7fd
什么是HIVE
HIVE是由Facebook開源(目前移交Apache)用于解決海量結(jié)構(gòu)化日志的數(shù)據(jù)統(tǒng)計(jì)彤敛。
他是一個(gè)基于Hadoop的數(shù)據(jù)倉庫工具印衔,可以將結(jié)構(gòu)化數(shù)據(jù)映射成一張表璧眠,并提供類SQL的查詢服務(wù)逗堵。
HIVE原理本質(zhì)上是一個(gè)將HQL語句轉(zhuǎn)換為MapReduce的轉(zhuǎn)換器韧拒。
- HIVE處理的數(shù)據(jù)保存在HDFS上
- HIVE默認(rèn)的底層實(shí)現(xiàn)是MapReduce(慢玉控,吞吐量大)
- 程序運(yùn)行在YARN上
HIVE可以理解為Hadoop的客戶端剃盾,讓人更方便的操作內(nèi)部存儲(chǔ)的數(shù)據(jù)蛆挫。也是Hadoop生態(tài)圈中少有的不是分布式框架的組件。畢竟沒有聽說過誰的chrome瀏覽器還是分布式的玻蝌。
HIVE的優(yōu)缺點(diǎn)
HIVE的優(yōu)點(diǎn)
- 接口是類SQL語言蟹肘,提高開發(fā)能力澈魄,降低學(xué)習(xí)成本递沪。
- HIVE的延遲高榛泛,因此HIVE做數(shù)據(jù)分析的場景對(duì)實(shí)時(shí)性要求不高。
- HIVE的優(yōu)勢在于處理海量數(shù)據(jù)许饿,對(duì)小數(shù)據(jù)沒有優(yōu)勢,畢竟延遲高舵盈,底層還是MR陋率。
- HIVE支持自定義函數(shù),用戶可以按照自己的需求自定義函數(shù)秽晚。
HIVE的缺點(diǎn)
- HQL表達(dá)能力有限瓦糟,這是SQL的通病,例如無法表示迭代式算法赴蝇。
- 不擅長數(shù)據(jù)挖掘
- 效率低菩浙,底層是MR。
- 調(diào)優(yōu)比較困難句伶,是粗粒度處理劲蜻。
HIVE的架構(gòu)原理
HIVE本質(zhì)是一個(gè)客戶端,所以在這個(gè)框架里面很多東西并不在HIVE中考余,元數(shù)據(jù)存放在關(guān)系型數(shù)據(jù)庫中先嬉,上端是用戶的操作,下端是MR楚堤。
之后中間四個(gè)器是HIVE的疫蔓,這四個(gè)器的運(yùn)行順序是解析器-->編譯器-->優(yōu)化器-->執(zhí)行器。
解析器
將SQL字符串轉(zhuǎn)化為抽象語法樹AST身冬,這一步使用第三方工具完成衅胀,例如antlr。
之后對(duì)AST進(jìn)行語法分析吏恭,例如表是否存在拗小,語法是否錯(cuò)誤。編譯器
將AST編譯生成邏輯執(zhí)行計(jì)劃樱哼。優(yōu)化器
對(duì)邏輯執(zhí)行計(jì)劃進(jìn)行優(yōu)化哀九。執(zhí)行器
將邏輯執(zhí)行計(jì)劃轉(zhuǎn)換成可執(zhí)行的物理計(jì)劃剿配,既MapReduce。
ANTLR解析階段
HIVE運(yùn)行原理
HIVE和數(shù)據(jù)庫的區(qū)別
查詢語言的區(qū)別
因?yàn)镾QL被廣泛用于數(shù)據(jù)倉庫方面阅束,因此專門針對(duì)HIVE的特性設(shè)計(jì)了類SQL語言--HQL呼胚。
這使得熟悉SQL的開發(fā)者可以方便使用HIVE進(jìn)行開發(fā)。
數(shù)據(jù)存放位置的區(qū)別
HIVE是建立在Hadoop之上息裸,所以數(shù)據(jù)存儲(chǔ)在HDFS中蝇更。
數(shù)據(jù)庫則是存儲(chǔ)在本地文件系統(tǒng)中。
數(shù)據(jù)更新
由于HIVE是針對(duì)數(shù)據(jù)倉庫應(yīng)用設(shè)計(jì)的呼盆,而數(shù)據(jù)倉庫的內(nèi)容是讀多寫少年扩。因此,HIVE不建議對(duì)數(shù)據(jù)倉庫進(jìn)行頻繁讀寫访圃,所有的數(shù)據(jù)再存入時(shí)就要確定好厨幻。
而數(shù)據(jù)庫的數(shù)據(jù)是要頻繁讀寫的,因此可以使用語句來添加修改數(shù)據(jù)腿时。
索引
HIVE沒有索引况脆,也不需要索引。他讀取數(shù)據(jù)就是暴力掃描所有數(shù)據(jù)批糟。
而數(shù)據(jù)庫需要根據(jù)實(shí)際應(yīng)用對(duì)一個(gè)或多個(gè)建立索引格了,方便讀取和檢索。
執(zhí)行
HIVE的查詢時(shí)基于MapReduce實(shí)現(xiàn)的徽鼎,數(shù)據(jù)庫則是有自己的執(zhí)行引擎盛末。
執(zhí)行延遲
HIVE的讀取是直接暴力掃描所有數(shù)據(jù),而且底層還是MR纬傲,雙重延遲满败,導(dǎo)致HIVE延遲很高,但是這個(gè)高是相對(duì)的叹括,HIVE可以處理海量數(shù)據(jù)還保持一個(gè)可以接收的延遲算墨。
在和數(shù)據(jù)庫比較時(shí),HIVE的并行處理能力優(yōu)勢就得到的體現(xiàn)汁雷。
可擴(kuò)展性
HIVE的存儲(chǔ)是基于Hadoop的HDFS净嘀,世界上最大的hadoop集群是Yahoo的集群(4W臺(tái)服務(wù)器,600PB數(shù)據(jù)侠讯,19個(gè)集群挖藏。)
而oracle最多也不過百臺(tái)服務(wù)器。