在學大數據分析的過程當中,Hive和HBase是兩個很是重要的內容,對於初學者而言容易混淆。因此比較二者的聯繫與差異,可以幫助咱們對這兩個組件有一個清晰的認識和定位。那麼,Hive和HBase有哪些區別與聯繫以及適用於哪些場景呢?
首先還要從二者的概念入手。Hive是運行在Hadoop上的一個工具,準確地講是一個搜索工具。當對海量數據進行搜索時,Hadoop的計算引擎是MapReduce。可是對MapReduce的操做和編程是很是複雜的。因而Hive的存在就讓複雜的編程過程簡化成了用SQL語言對海量數據的操做。這大大減輕了程序員的工做量。能夠說,Hive的存在讓海量數據的增刪改查更加方便。其實從Hive的logo就能夠看出Hive讓大象變成了小蜜蜂,化繁爲簡是它最本質的亮點。
再來講說HBase,它是Hadoop的子項目,固然也能夠理解爲一個工具。Hadoop的數據運算是由MapReduce完成的,而數據存儲是由HDFS完成的。HDFS是分佈式存儲,這是Hadoop存儲數據的特色,但由此帶來的問題就是數據的無序和散亂。HBase的產生,很好地解決了這一問題。HBase可以把這些數據映射成一張哈希表,那麼,這些數據一旦成爲具備實際存儲意義的表以後,就由無序變得有序,從而對數據搜索和操做的效率大大提升了。程序員
作一個總結,Hive和HBase都是Hadoop集羣下的工具,Hive是對MapReduce的優化,而HBase則是HDFS數據存儲的大管家。那麼,這二者各適用於哪些場景呢?
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,多級索引,表關係複雜的應用場景。
二者使用場景的區別:
HBase的應用場景一般是採集網頁數據的存儲,由於它是key-value型數據庫,從而能夠到各類key-value應用場景,例如存儲日誌信息,對於內容信息不須要徹底結構化出來的類CMS應用等。注意hbase針對的仍然是OLTP應用爲主。
hive主要針對的是OLAP應用,其底層是hdfs分佈式文件系統,重點是基於一個統一的查詢分析層,支撐OLAP應用中的各類關聯,分組,聚合類SQL語句。hive通常只用於查詢分析統計,而不能是常見的CUD操做,要知道HIVE是須要從已有的數據庫或日誌進行同步最終入到hdfs文件系統中,當前要作到增量實時同步都至關困難。
以上就是關於Hive和HBase有哪些區別與聯繫及適用場景的論述,但願對學大數據分析的同窗有所幫助。
數據庫