對於hbase當前noSql數據庫的一種,最常見的應用場景就是采集的網頁數據的存儲,由於是key-value型數據庫,可以再擴展到各種key-value應用場景,如日志信息的存儲,對於內容信息不需要完全結構化出來的類CMS應用等。注意hbase針對的仍然是OLTP應用為主。
對於hive主要針對的是OLAP應用,注意其底層不是hbase,而是hdfs分布式文件系統,重點是基於一個統一的查詢分析層,支撐OLAP應用中的各種關聯,分組,聚合類SQL語句。hive一般只用於查詢分析統計,而不能是常見的CUD操作,要知道HIVE是需要從已有的數據庫或日志進行同步最終入到hdfs文件系統中,當前要做到增量實時同步都相當困難。
和mysql,oracle完全不是相同的應用場景。這個是結構化數據庫,針對的更多的是結構化,事務一致性要求高,業務規則邏輯復雜,數據模型復雜的企業信息化類應用等。包括互聯網應用中的很多業務系統也需要通過結構化數據庫來實現。所以和hbase,hive不是一個層面的東西,不比較。
摘自:https://www.zhihu.com/question/21677041
其他回答:
鏈接: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,多級索引,表關系復雜的應用場景。

Reasons to use Hive on HBase:
A lot of data sitting in HBase due to its usage in a real-time environment, but never used for analysis
Give access to data in HBase usually only queried through MapReduce to people that don’t code (business analysts)
When needing a more flexible storage solution, so that rows can be updated live by either a Hive job or an application and can be seen immediately to the other
Reasons not to do it:
Run SQL queries on HBase to answer live user requests (it’s still a MR job)
Hoping to see interoperability with other SQL analytics systems
Hive can use tables that already exist in HBase or manage its own ones, but they still all reside in the same HBase instance
When using an already existing table, defined as EXTERNAL, you can create multiple Hive tables that point to it
參考:www.cs.kent.edu/~jin/Cloud12Spring/HbaseHivePig.pptx