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