大數據的核心組件HIVE和HBASE二者之間到底是什麼關係?

有很多朋友私聊我問我hive和hbase到底有什麼什麼關係,他們之間有什麼異同,其實在我看來,二者哪裡都不像同時又哪裡都很像,下面我具體分析一下

hive是什麼

Apache Hive是一個構建在Hadoop基礎設施之上的數據倉庫。通過Hive可以使用HQL語言查詢存放在HDFS上的數據。HQL是一種類SQL語言,這種語言最終被轉化為Map/Reduce. 雖然Hive提供了SQL查詢功能,但是Hive不能夠進行交互查詢--因為它只能夠在Haoop上批量的執行Hadoop。

注意:hive是構建在hadoop上的數據倉庫,適用於離線的批量數據計算

hbase是什麼

Apache HBase是一種Key/Value系統,我們知道的key/value系統有哪些?比如java中的map,redis都是這種系統,這種系統的最大特點是什麼?很明顯是速度快,可以說HBase是建立在Hadoop文件系統之上的分佈式面向列的數據庫。它是一個開源項目,是橫向擴展的。HBase是一個數據模型,類似於谷歌的大表設計,可以提供快速隨機訪問海量結構化數據。它利用了Hadoop的文件系統(HDFS)提供的容錯能力。它是Hadoop的生態系統,提供對數據的隨機實時讀/寫訪問,是Hadoop文件系統的一部分。我們可以直接或通過HBase的存儲HDFS數據。使用HBase在HDFS讀取消費/隨機訪問數據。 HBase在Hadoop的文件系統之上,並提供了讀寫訪問。

主意:hbase是Hadoop的數據庫,是一種NoSQL數據庫,主要適用於海量明細數據的隨機實時查詢。

兩者到底有什麼關係和區別?

當今的數據處理大致可以分成兩大類:聯機事務處理OLTP(on-linetransaction processing)聯機分析處理OLAP(On-Line Analytical Processing)

  • OLTP是傳統的關係型數據庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。
  • OLAP是數據倉庫系統的主要應用,支持複雜的分析操作,側重決策支持,並且提供直觀易懂的查詢結果。

簡單的說,HBase是OLTP,Hive是OLAP

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,多級索引,表關係複雜的應用場景

3. 使用的限制

Hive目前不支持更新操作。另外,由於hive在hadoop上運行批量操作,它需要花費很長的時間,通常是幾分鐘到幾個小時才可以獲取到查詢的結果。Hive必須提供預先定義好的schema將文件和目錄映射到列,並且Hive與ACID不兼容。

HBase查詢是通過特定的語言來編寫的,這種語言需要重新學習。類SQL的功能可以通過Apache Phonenix實現,但這是以必須提供schema為代價的。另外,Hbase也並不是兼容所有的ACID特性,雖然它支持某些特性。最後但不是最重要的--為了運行Hbase,Zookeeper是必須的,zookeeper是一個用來進行分佈式協調的服務,這些服務包括配置服務,維護元信息和命名空間服務。

4. 應用場景

Hive適合用來對一段時間內的數據進行分析查詢,例如,用來計算趨勢或者網站的日誌。Hive不應該用來進行實時的查詢。因為它需要很長時間才可以返回結果。

Hbase非常適合用來進行大數據的實時查詢。Facebook用Hbase進行消息和實時的分析。它也可以用來統計Facebook的連接數。

5. 總結

hive和hbase可以說是基於大數據架構的一種協作模式,附圖

大數據的核心組件HIVE和HBASE二者之間到底是什麼關係?

Hive和Hbase是兩種基於Hadoop的不同技術--Hive是一種類SQL的引擎,並且運行MapReduce任務,Hbase是一種在Hadoop之上的NoSQL 的Key/vale數據庫。當然,這兩種工具是可以同時使用的。就像用Google來搜索,用FaceBook進行社交一樣,Hive可以用來進行統計查詢,HBase可以用來進行實時查詢,數據也可以從Hive寫到Hbase,設置再從Hbase寫回Hive。

個人總結:

hive可以認為是map-reduce的一個包裝。hive的意義就是把好寫的hive的sql轉換為複雜難寫的map-reduce程序。

hbase可以認為是hdfs的一個包裝。他的本質是數據存儲,是個NoSql數據庫;hbase部署於hdfs之上,並且克服了hdfs在隨機讀取方面的缺陷


分享到:


相關文章: