https://www.zhihu.com/question/21677041/answer/185664626web
先放結論:Hbase和Hive在大數據架構中處在不一樣位置:數據庫
Hbase主要解決實時數據查詢問題架構
Hive主要解決數據處理和計算問題,通常是配合使用。app
1、區別:ide
Hbase: Hadoop database 的簡稱,也就是基於Hadoop數據庫,是一種NoSQL數據庫,主要適用於海量明細數據(十億、百億)的隨機實時查詢,如日誌明細、交易清單、軌跡行爲等。工具
Hive:Hive是Hadoop數據倉庫,嚴格來講,不是數據庫,主要是讓開發人員可以經過SQL來計算和處理HDFS上的結構化數據,適用於離線的批量數據計算。oop
經過元數據來描述Hdfs上的結構化文本數據,通俗點來講,就是定義一張表來描述HDFS上的結構化文本,包括各列數據名稱,數據類型是什麼等,方便咱們處理數據,當前不少SQL ON Hadoop的計算引擎均用的是hive的元數據,如Spark SQL、Impala等;大數據
基於第一點,經過SQL來處理和計算HDFS的數據,Hive會將SQL翻譯爲Mapreduce來處理數據;spa
2、關係翻譯
在大數據架構中,Hive和HBase是協做關係,數據流通常以下圖:
經過ETL工具將數據源抽取到HDFS存儲;
經過Hive清洗、處理和計算原始數據;
HIve清洗處理後的結果,若是是面向海量數據隨機查詢場景的可存入Hbase
數據應用從HBase查詢數據;
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,多級索引,表關係複雜的應用場景。