Hbase筆記五:Hbase和Hive

對於剛接觸大數據的用戶來說,要想區分Hive與HBase是有一定難度的。本文將嘗試從其各自的定義、特點、限制、應用場景等角度來進行分析,以作拋磚引玉之用。

 Hive是什麼?

Apache Hive是一個構建於Hadoop(分佈式系統基礎架構)頂層的數據倉庫,注意這裏不是數據庫。Hive可以看作是用戶編程接口,它本身不存儲和計算數據;它依賴於HDFS(Hadoop分佈式文件系統)和MapReduce(一種編程模型,映射與化簡;用於大數據並行運算)。其對HDFS的操作類似於SQL—名爲HQL,它提供了豐富的SQL查詢方式來分析存儲在HDFS中的數據;HQL經過編譯轉爲MapReduce作業後通過自己的SQL 去查詢分析需要的內容;這樣一來,即使不熟悉MapReduce 的用戶也可以很方便地利用SQL 語言查詢、彙總、分析數據。而MapReduce開發人員可以把己寫的mapper 和reducer 作爲插件來支持Hive 做更復雜的數據分析。

HBase是什麼?

Apache HBase是運行於HDFS頂層的NoSQL(=Not Only SQL,泛指非關係型的數據庫)數據庫系統。區別於Hive,HBase具備隨即讀寫功能,是一種面向列的數據庫。HBase以表的形式存儲數據,表由行和列組成,列劃分爲若干個列簇(row family)。例如:一個消息列簇包含了發送者、接受者、發送日期、消息標題以及消息內容。每一對鍵值在HBase會被定義爲一個Cell,其中,鍵由row-key(行鍵),列簇,列,時間戳構成。而在HBase中每一行代表由行鍵標識的鍵值映射組合。Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。

特性

遵從JDBC的Hive不但可以讓具SQL知識的用戶來間接執行MapReduce作業,同時裏面也整合了目前基於SQL的操作工具。不過,由於默認的數據讀取是全表遍歷的,其時間的耗費也不可避免地相對較大。儘管如此,不盡相同的Hive分區方法,其遍歷讀取的數據量也是能夠有所限制的。Hive分區允許對存儲在獨立文件上的數據進行篩選查詢,返回的是篩選後的數據。例如針對日期的日誌文件訪問,前提是該類文件的文件名包含日期信息。

HBase以鍵值對的形式儲存數據。其包含了4種主要的數據操作方式:

  1. 添加或更新數據行
  2. 掃描獲取某範圍內的cells
  3. 爲某一具體數據行返回對應的cells
  4. 從數據表中刪除數據行/列,或列的描述信息

列信息可用於獲取數據變動前的取值(透過HBase壓縮策略可以刪除列信息歷史記錄來釋放存儲空間)。

限制

Hive不支持常規的SQL更新語句,如:數據插入,更新,刪除。因爲其對數據的操作是針對整個數據表的。同時該特點也使得數據查詢用時以數分鐘甚至數小時來進行計算。此外,其MapReduce轉換過程必須遵從預定義的轉換規則。

HBase的數據查詢是有一套屬於自己類似SQL的操作語言的,這個需要一定的學習來掌握。此外,要運行HBase,ZooKeeper是需要配備的。ZooKeeper是一個針對大型分佈式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、分佈式同步、組服務等。

應用舉例

Hive適用於網絡日誌等數據量大、靜態的數據查詢。例如:用戶消費行爲記錄,網站訪問足跡等。但是不適用於聯機實時在線查詢的場合。

HBase能在大數據聯機實時查詢場合大展身手。例如:Fackbook就利用其對用戶間的傳送的消息進行聯機實時分析。

小結

Hive與HBase兩者是基於Hadoop上不同的技術。Hive是一種能執行MapReduce作業的類SQL編程接口,Hbase是一種非關係型的數據庫結構。結合這兩者自身的特點,互相結合使用或許能收到相得益彰的效果。例如:利用Hive處理靜態離線數據,利用HBase進行聯機實時查詢,而後對兩者間的結果集進行整合歸併,從而使得數據完整且永葆青春,爲進一步的商業分析提供良好支持。

英文出自:xplenty

PS:

共同點:
1.hbase與hive都是架構在hadoop之上的。都是用hadoop作爲底層存儲

區別:

2.Hive是建立在Hadoop之上爲了減少MapReduce jobs編寫工作的批處理系統,HBase是爲了支持彌補Hadoop對實時操作

的缺陷的項目 。


3.想象你在操作RMDB數據庫,如果是全表掃描,就用Hive+Hadoop,如果是索引訪問,就用HBase+Hadoop 。


4.Hive query就是MapReduce jobs可以從5分鐘到數小時不止,HBase是非常高效的,肯定比Hive高效的多。


5.Hive本身不存儲和計算數據,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯。


6.hive借用hadoop的MapReduce來完成一些hive中的命令的執行


7.hbase是物理表,不是邏輯表,提供一個超大的內存hash表,搜索引擎通過它來存儲索引,方便查詢操作。


8.hbase是列存儲。


9.hdfs作爲底層存儲,hdfs是存放文件的系統,而Hbase負責組織文件。


10.hive需要用到hdfs存儲文件,需要用到MapReduce計算框架。


發佈了10 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章