淺談Hive和HBase有哪些區別與聯繫及適用場景

在學大數據分析的過程中,Hive和HBase是兩個非常重要的內容,對於初學者而言容易混淆。所以比較兩者的聯繫與差別,能夠幫助我們對這兩個組件有一個清晰的認識和定位。那麼,Hive和HBase有哪些區別與聯繫以及適用於哪些場景呢?


首先還要從兩者的概念入手。Hive是運行在Hadoop上的一個工具,準確地講是一個搜索工具。當對海量數據進行搜索時,Hadoop的計算引擎是MapReduce。但是對MapReduce的操作和編程是非常複雜的。於是Hive的存在就讓複雜的編程過程簡化成了用SQL語言對海量數據的操作。這大大減輕了程序員的工作量。可以說,Hive的存在讓海量數據的增刪改查更加方便。其實從Hive的logo就可以看出Hive讓大象變成了小蜜蜂,化繁為簡是它最本質的亮點。

再來說說HBase,它是Hadoop的子項目,當然也可以理解為一個工具。Hadoop的數據運算是由MapReduce完成的,而數據存儲是由HDFS完成的。HDFS是分佈式存儲,這是Hadoop存儲數據的特點,但由此帶來的問題就是數據的無序和散亂。HBase的產生,很好地解決了這一問題。HBase能夠把這些數據映射成一張哈希表,那麼,這些數據一旦成為具有實際存儲意義的表之後,就由無序變得有序,從而對數據搜索和操作的效率大大提高了。

做一個總結,Hive和HBase都是Hadoop集群下的工具,Hive是對MapReduce的優化,而HBase則是HDFS數據存儲的大管家。那麼,這兩者各適用於哪些場景呢?

淺談Hive和HBase有哪些區別與聯繫及適用場景

1.Hive中的表為純邏輯表,僅僅對錶的元數據進行定義。Hive沒有物理存儲的功能,它完全依賴HDFS和MapReduce。尚學堂陳老師指出這樣就可以將結構化的數據文件映射為為一張數據庫表,並提供完整的SQL查詢功能,並將SQL語句最終轉換為MapReduce任務進行運行。HBase表則是物理表,適合存放非結構化的數據。

2.Hive是在MapReduce的基礎上對數據進行處理,而MapReduce的數據處理依照行模式;而HBase為列模式,這樣使得對海量數據的隨機訪問變得可行。

3.HBase的存儲表存儲密度小,因而用戶可以對行定義成不同的列;而Hive是邏輯表,屬於稠密型,即定義列數,每一行對列數都有固定的數據。

4.Hive使用Hadoop來分析處理數據,而Hadoop系統是批處理系統,所以數據處理存在延時的問題;而HBase是準實時系統,可以實現數據的實時查詢。

5.Hive沒有row-level的更新,它適用於大量append-only數據集(如日誌)的批任務處理。而基於HBase的查詢,支持和row-level的更新。

6.Hive全面支持SQL,一般可以用來進行基於歷史數據的挖掘、分析。而HBase不適用於有join,多級索引,表關係複雜的應用場景。

兩者使用場景的區別:

HBase的應用場景通常是採集網頁數據的存儲,因為它是key-value型數據庫,從而可以到各種key-value應用場景,例如存儲日誌信息,對於內容信息不需要完全結構化出來的類CMS應用等。注意hbase針對的仍然是OLTP應用為主。

hive主要針對的是OLAP應用,其底層是hdfs分佈式文件系統,重點是基於一個統一的查詢分析層,支撐OLAP應用中的各種關聯,分組,聚合類SQL語句。hive一般只用於查詢分析統計,而不能是常見的CUD操作,要知道HIVE是需要從已有的數據庫或日誌進行同步最終入到hdfs文件系統中,當前要做到增量實時同步都相當困難。

以上就是關於Hive和HBase有哪些區別與聯繫及適用場景的論述,希望對學大數據分析的同學有所幫助。


分享到:


相關文章: