Hive和HBase的區別

hive是文件的視圖,hbase是建了索引的key-value表。 web

先放結論:Hbase和Hive在大數據架構中處在不一樣位置,Hbase主要解決實時數據查詢問題,Hive主要解決數據處理和計算問題,通常是配合使用。數據庫

Hive的底層能夠是HBase或者HDFS上存儲的文件。
Hive的做用是把HQL翻譯成MapReduce程序,從而減小分析人員每次都要寫冗長Java程序的工做量。單次Hive查詢都須要耗費分鐘級以上的時間(哪怕一個再小的表),所以沒法做爲web後端的數據庫使用。
HBase能夠替代MySQL使用,至少淘寶就是這麼作了。HBase是建造在HDFS基礎上的分佈式數據庫,能夠支持海量數據(比MySQL高一到兩個量級)的存儲和查詢。還不容易丟失數據。後端

1、區別:架構

  1. Hbase: Hadoop database 的簡稱,也就是基於Hadoop數據庫,是一種NoSQL數據庫,主要適用於海量明細數據(十億、百億)的隨機實時查詢,如日誌明細、交易清單、軌跡行爲等。
  2. Hive:Hive是Hadoop數據倉庫,嚴格來講,不是數據庫,主要是讓開發人員可以經過SQL來計算和處理HDFS上的結構化數據,適用於離線的批量數據計算。
  • 經過元數據來描述Hdfs上的結構化文本數據,通俗點來講,就是定義一張表來描述HDFS上的結構化文本,包括各列數據名稱,數據類型是什麼等,方便咱們處理數據,當前不少SQL ON Hadoop的計算引擎均用的是hive的元數據,如Spark SQL、Impala等;
  • 基於第一點,經過SQL來處理和計算HDFS的數據,Hive會將SQL翻譯爲Mapreduce來處理數據;

2、關係app

在大數據架構中,Hive和HBase是協做關係,數據流通常以下圖:分佈式

  1. 經過ETL工具將數據源抽取到HDFS存儲;
  2. 經過Hive清洗、處理和計算原始數據;
  3. HIve清洗處理後的結果,若是是面向海量數據隨機查詢場景的可存入Hbase
  4. 數據應用從HBase查詢數據;


 

附詳細說明:工具

1. 二者分別是什麼?  oop

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

    Apache HBase是一種Key/Value系統,它運行在HDFS之上。和Hive不同,Hbase的可以在它的數據庫上實時運行,而不是運行MapReduce任務。Hbase被分區爲表格,表格又被進一步分割爲列簇。列簇必須使用schema定義,列簇將某一類型列集合起來(列不要求schema定義)。例如,「message」列簇可能包含:「to」, 」from」 「date」, 「subject」, 和」body」. 每個 key/value對在Hbase中被定義爲一個cell,每個key由row-key,列簇、列和時間戳。在Hbase中,行是key/value映射的集合,這個映射經過row-key來惟一標識。Hbase利用Hadoop的基礎設施,能夠利用通用的設備進行水平的擴展。大數據

2. 二者的特色

  Hive幫助熟悉SQL的人運行MapReduce任務。由於它是JDBC兼容的,同時,它也可以和現存的SQL工具整合在一塊兒。運行Hive查詢會花費很長時間,由於它會默認遍歷表中全部的數據。雖然有這樣的缺點,一次遍歷的數據量能夠經過Hive的分區機制來控制。分區容許在數據集上運行過濾查詢,這些數據集存儲在不一樣的文件夾內,查詢的時候只遍歷指定文件夾(分區)中的數據。這種機制能夠用來,例如,只處理在某一個時間範圍內的文件,只要這些文件名中包括了時間格式。

    HBase經過存儲key/value來工做。它支持四種主要的操做:增長或者更新行,查看一個範圍內的cell,獲取指定的行,刪除指定的行、列或者是列的版本。版本信息用來獲取歷史數據(每一行的歷史數據能夠被刪除,而後經過Hbase compactions就能夠釋放出空間)。雖然HBase包括表格,可是schema僅僅被表格和列簇所要求,列不須要schema。Hbase的表格包括增長/計數功能。

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

 

 

 

做者:yuan daisy
連接:https://www.zhihu.com/question/21677041/answer/78289309
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

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

相關文章
相關標籤/搜索