https://www.zhihu.com/question/21677041/answer/185664626
先放結(jié)論:Hbase和Hive在大數(shù)據(jù)架構(gòu)中處在不同位置:
Hbase主要解決實(shí)時(shí)數(shù)據(jù)查詢問(wèn)題
Hive主要解決數(shù)據(jù)處理和計(jì)算問(wèn)題,一般是配合使用。
一、區(qū)別:
Hbase: Hadoop database 的簡(jiǎn)稱,也就是基于Hadoop數(shù)據(jù)庫(kù),是一種NoSQL數(shù)據(jù)庫(kù),主要適用于海量明細(xì)數(shù)據(jù)(十億、百億)的隨機(jī)實(shí)時(shí)查詢,如日志明細(xì)、交易清單、軌跡行為等。
Hive:Hive是Hadoop數(shù)據(jù)倉(cāng)庫(kù),嚴(yán)格來(lái)說(shuō),不是數(shù)據(jù)庫(kù),主要是讓開(kāi)發(fā)人員能夠通過(guò)SQL來(lái)計(jì)算和處理HDFS上的結(jié)構(gòu)化數(shù)據(jù),適用于離線的批量數(shù)據(jù)計(jì)算。
通過(guò)元數(shù)據(jù)來(lái)描述Hdfs上的結(jié)構(gòu)化文本數(shù)據(jù),通俗點(diǎn)來(lái)說(shuō),就是定義一張表來(lái)描述HDFS上的結(jié)構(gòu)化文本,包括各列數(shù)據(jù)名稱,數(shù)據(jù)類型是什么等,方便我們處理數(shù)據(jù),當(dāng)前很多SQL ON Hadoop的計(jì)算引擎均用的是hive的元數(shù)據(jù),如Spark SQL、Impala等;
基于第一點(diǎn),通過(guò)SQL來(lái)處理和計(jì)算HDFS的數(shù)據(jù),Hive會(huì)將SQL翻譯為Mapreduce來(lái)處理數(shù)據(jù);
二、關(guān)系
在大數(shù)據(jù)架構(gòu)中,Hive和HBase是協(xié)作關(guān)系,數(shù)據(jù)流一般如下圖:
通過(guò)ETL工具將數(shù)據(jù)源抽取到HDFS存儲(chǔ);
通過(guò)Hive清洗、處理和計(jì)算原始數(shù)據(jù);
HIve清洗處理后的結(jié)果,如果是面向海量數(shù)據(jù)隨機(jī)查詢場(chǎng)景的可存入Hbase
數(shù)據(jù)應(yīng)用從HBase查詢數(shù)據(jù);
1. Hive中的表是純邏輯表,就只是表的定義等,即表的元數(shù)據(jù)。Hive本身不存儲(chǔ)數(shù)據(jù),它完全依賴HDFS和MapReduce。這樣就可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為為一張數(shù)據(jù)庫(kù)表,并提供完整的SQL查詢功能,并將SQL語(yǔ)句最終轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。 而HBase表是物理表,適合存放非結(jié)構(gòu)化的數(shù)據(jù)。
2. Hive是基于MapReduce來(lái)處理數(shù)據(jù),而MapReduce處理數(shù)據(jù)是基于行的模式;HBase處理數(shù)據(jù)是基于列的而不是基于行的模式,適合海量數(shù)據(jù)的隨機(jī)訪問(wèn)。
3. HBase的表是疏松的存儲(chǔ)的,因此用戶可以給行定義各種不同的列;而Hive表是稠密型,即定義多少列,每一行有存儲(chǔ)固定列數(shù)的數(shù)據(jù)。
4. Hive使用Hadoop來(lái)分析處理數(shù)據(jù),而Hadoop系統(tǒng)是批處理系統(tǒng),因此不能保證處理的低遲延問(wèn)題;而HBase是近實(shí)時(shí)系統(tǒng),支持實(shí)時(shí)查詢。
5. Hive不提供row-level的更新,它適用于大量append-only數(shù)據(jù)集(如日志)的批任務(wù)處理。而基于HBase的查詢,支持和row-level的更新。
6. Hive提供完整的SQL實(shí)現(xiàn),通常被用來(lái)做一些基于歷史數(shù)據(jù)的挖掘、分析。而HBase不適用與有join,多級(jí)索引,表關(guān)系復(fù)雜的應(yīng)用場(chǎng)景。