hive是文件的視圖,hbase是建了索引的key-value表。 web
先放結論:Hbase和Hive在大數據架構中處在不一樣位置,Hbase主要解決實時數據查詢問題,Hive主要解決數據處理和計算問題,通常是配合使用。數據庫
Hive的底層能夠是HBase或者HDFS上存儲的文件。
Hive的做用是把HQL翻譯成MapReduce程序,從而減小分析人員每次都要寫冗長Java程序的工做量。單次Hive查詢都須要耗費分鐘級以上的時間(哪怕一個再小的表),所以沒法做爲web後端的數據庫使用。
HBase能夠替代MySQL使用,至少淘寶就是這麼作了。HBase是建造在HDFS基礎上的分佈式數據庫,能夠支持海量數據(比MySQL高一到兩個量級)的存儲和查詢。還不容易丟失數據。後端
1、區別:架構
2、關係app
在大數據架構中,Hive和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,多級索引,表關係複雜的應用場景。