三分鐘入門大數據之Hive與HBase之間的區別與聯繫是什麼?

哈嘍,大家好,我是漢斯老師。近幾年來,互聯網行業由於較高的薪資收入,受到許多人的追捧。很多年輕的學子,或是其他行業的有志青年,都想要投身到這個行業中來。然而一方面受到“互聯網寒冬”的影響,最近頻頻傳出各家知名互聯網公司裁員縮編的消息;另一方面,大量的人才湧入,又使得互聯網產業在職場上呈現出供過於求的特徵,並最終導致了職場上的激烈競爭。那麼互聯網行業未來的潛力在哪裡?我們又應該在哪個方向上發力,才能保證自己可以獲得一份高薪而穩定的工作?基於多年的互聯網行業從業經驗,漢斯老師在這裡向大家推薦大數據方向,希望通過本人的《三分鐘入門大數據》和《十分鐘精通大數據》等系列文章,幫助所有有志瞭解學習大數據的朋友掌握大數據的相關知識,也歡迎所有對互聯網行業以及大數據領域感興趣的朋友前來交流。

三分鐘入門大數據之Hive與HBase之間的區別與聯繫是什麼?

很多萌新在剛接觸Hadoop體系下的各個組件時,往往會對Hive和HBase的區別和聯繫存在疑惑,那麼Hive和HBase到底是做什麼的?他們之間的區別和聯繫又是什麼呢?

兩者的定義和作用

A. Hive是Hadoop體系中,基於HDFS分佈式文件系統下的一個數據倉庫的查詢工具。我們知道,Hadoop在計算其文件系統中的存儲的數據時,是使用MapReduce來進行計算的。然而MapReduce的開發較為繁瑣。試想一下,假如我們想要從Hadoop中找到一些特定的數據,那麼我們每次都要開發一個MapReduce項目並運行起來才能得到結果,這中間所消耗的時間,即使是一個開發MapRduce程序的熟手來做,也是以小時計的,這是令人完全無法接受的!

這個時候,就有人想了,普通的關係型數據庫查詢語句SQL非常簡單,應用的也比較廣泛。那麼我們有沒有辦法可以像查詢關係型數據庫那樣查詢Hadoop中的數據呢?當然,Hive就是實現這個功能的。Hive中有Hive SQL,這種查詢語句幾乎與SQL語句完全相同。當我們寫出一個Hive SQL並運行起來時,Hadoop中實際上是將Hive SQL轉化為對應功能的MapRduce並執行。

B. HBase是Hadoop中一個NoSQL數據庫。要注意在HBase中,有兩個特點。首先,數據都是列式存儲的,每一列都會屬於其對應的列族,這與常見的關係型數據庫按行存儲的方式不同。此外,HBase是一個key-value性質的數據庫。這就意味著,HBase允許靈活的存儲具有不同格式,不同屬性定義的數據。

兩者的區別與聯繫

Hive和HBase的區別在於作用定位不同。Hive只是查詢工具,本身並不存儲數據,這裡要注意,儘管Hive並不存儲數據,但Hive SQL是有create table和insert語句的。然而Hive本質上只是將插入的數據放入到HDFS文件系統中。當使用Hive進行查詢的時候,Hive會在邏輯層面(內存)映射出一張表,其映射的對象就是HDFS中的數據(當然,也可以映射HBase中的表)。然而由於數據倉庫本身的特性,註定了Hive不能有效支持更新數據的操作。此外,由於Hive SQL會被轉化為MapReduce任務執行,而MR任務即使是做最簡單的查詢也會花費大量的時間,這也就註定了Hive僅能支持非實時性的查詢任務。

而HBase是Hadoop中的一個數據庫組件,儘管其底層也是基於HDFS文件系統,但是它是真正在物理層面存儲數據的。HBase既能支持MapRduce查詢,也可以單獨提供快速查詢的功能(當然,需要有其他組件的支持)。HBase本質上是將各種雜亂無序的數據映射成為一個大的哈希表,這也就使得HBase具備了NoSQL數據庫的特性,可以允許行級數據間,存在不同的數據結構。不同於Hive,由於HBase是單獨存儲數據,這也意味著HBase可以支持插入,更新,刪除,查詢等操作。


分享到:


相關文章: