1. 簡(jiǎn)介
使用mapreduce 這樣的計(jì)算框架,可以寫(xiě)出像wordcount這樣的程序,雖然已經(jīng)極大的化簡(jiǎn)了分布式編程的門(mén)檻,但是使用mapreduce依然不夠簡(jiǎn)潔。這就是hive誕生的背景。
程序員發(fā)現(xiàn),MapReduce的程序?qū)懫饋?lái)真麻煩。他們希望簡(jiǎn)化這個(gè)過(guò)程。這就好比你有了匯編語(yǔ)言,雖然你幾乎什么都能干了,但是你還是覺(jué)得繁瑣。你希望有個(gè)更高層更抽象的語(yǔ)言層來(lái)描述算法和數(shù)據(jù)處理流程。于是就有了Hive。
Hive可以理解為 分布式 環(huán)境下的 SQL。在hive 下可以sql 語(yǔ)句,hive會(huì)把SQL語(yǔ)言翻譯成MapReduce程序,丟給計(jì)算引擎去計(jì)算,而你就從繁瑣的MapReduce程序中解脫出來(lái),用更簡(jiǎn)單更直觀的語(yǔ)言去寫(xiě)程序了。
小結(jié):
雖然hive使用的是sql的語(yǔ)句,但是hive底層調(diào)用依然是mapreduce計(jì)算框架。所以執(zhí)行的速度依然會(huì)很慢。
在配置hive的時(shí)候,沒(méi)有偽分布式的模式或者是完全分布模式。hive相當(dāng)于是hadoop的一個(gè)客戶端。所以它并沒(méi)有運(yùn)行模式。
2. hive的特點(diǎn)
- 數(shù)據(jù)倉(cāng)庫(kù)
(數(shù)據(jù)倉(cāng)庫(kù) 和數(shù)據(jù)庫(kù)的區(qū)別:
a. 數(shù)據(jù)庫(kù)強(qiáng)調(diào) oltp :online transaction process 在線事務(wù)處理
b. 數(shù)據(jù)倉(cāng)庫(kù)強(qiáng)調(diào):olap:online analysis process 在線分析處理) - hive 提供一個(gè)sql語(yǔ)句 hive ql
- hive的底層,依然是mapreduce,相當(dāng)于是在mapreduce上面做了一個(gè)封裝,對(duì)于用戶來(lái)說(shuō),就是相當(dāng)于你不用去寫(xiě)java 的代碼,實(shí)現(xiàn)mapreduce 了,而是直接可以像使用sql一樣處理數(shù)據(jù)了。
3. hive 的結(jié)構(gòu)
在安裝hive的時(shí)候,除了其他的配置,還需要一個(gè)數(shù)據(jù)庫(kù)的配置。這樣是因?yàn)閔ive需要存儲(chǔ)元數(shù)據(jù)的信息。
hive里面的存儲(chǔ)元數(shù)據(jù)的地方是metastore,它保存了表名,列名,字段名等。通過(guò)元數(shù)據(jù)的信息,hive將hdfs上面的結(jié)構(gòu)化數(shù)據(jù)映射為一張張表。
metastore有三種存儲(chǔ)方式,一種是內(nèi)嵌模式,這是最簡(jiǎn)單的方式,使用內(nèi)嵌的derby數(shù)據(jù)來(lái)存儲(chǔ)元數(shù)據(jù)。缺點(diǎn)是,只支持一個(gè)用戶打開(kāi)hive會(huì)話。第二種是本地模式,采用了mysql 來(lái)存儲(chǔ)元數(shù)據(jù)。這樣可以支持多個(gè)用戶訪問(wèn)hive。這三種是使用遠(yuǎn)程模式。
3. hive 的安裝
4. hive的使用
hive的學(xué)習(xí),我感覺(jué)有點(diǎn)像學(xué)習(xí)mysql。這一部分,有一個(gè)很好的官方文檔,叫做 《Hive Tutorial》。https://www.tutorialspoint.com/hive/index.htm
英文比較吃力的可以參考(還是建議看英文版本的)http://www.yiibai.com/hive/hive_installation.html
5. 與傳統(tǒng)數(shù)據(jù)的區(qū)別
數(shù)據(jù)更新
hive是基于hadoop 的,他們的特征都是“一次寫(xiě)入,多次讀取”。所以,hive是不支持?jǐn)?shù)據(jù)更新和添加的。