淺談Hive和HBase區別

出處:html

http://www.cnblogs.com/zlslch/p/5659641.html數據庫

. 二者分別是什麼?  分佈式

     Apache Hive是一個構建在Hadoop基礎設施之上的數據倉庫。經過Hive可使用HQL語言查詢存放在HDFS上的數據。HQL是一種類SQL語言,這種語言最終被轉化爲Map/Reduce. 雖然Hive提供了SQL查詢功能,可是Hive不可以進行交互查詢--由於它只可以在Haoop上批量的執行Hadoop。工具

     Apache HBase是一種Key/Value系統,它運行在HDFS之上。和Hive不同,Hbase的可以在它的數據庫上實時運行,而不是運行MapReduce任務。Hive被分區爲表格,表格又被進一步分割爲列簇。列簇必須使用schema定義,列簇將某一類型列集合起來(列不要求schema定義)。例如,「message」列簇可能包含:「to」, 」from」 「date」, 「subject」, 和」body」. 每個 key/value對在Hbase中被定義爲一個cell,每個key由row-key,列簇、列和時間戳。在Hbase中,行是key/value映射的集合,這個映射經過row-key來惟一標識。Hbase利用Hadoop的基礎設施,能夠利用通用的設備進行水平的擴展。oop

 

 

2. 二者的特色學習

  Hive幫助熟悉SQL的人運行MapReduce任務。由於它是JDBC兼容的,同時,它也可以和現存的SQL工具整合在一塊兒。運行Hive查詢會花費很長時間,由於它會默認遍歷表中全部的數據。雖然有這樣的缺點,一次遍歷的數據量能夠經過Hive的分區機制來控制。分區容許在數據集上運行過濾查詢,這些數據集存儲在不一樣的文件夾內,查詢的時候只遍歷指定文件夾(分區)中的數據。這種機制能夠用來,例如,只處理在某一個時間範圍內的文件,只要這些文件名中包括了時間格式。大數據

    HBase經過存儲key/value來工做。它支持四種主要的操做:增長或者更新行,查看一個範圍內的cell,獲取指定的行,刪除指定的行、列或者是列的版本。版本信息用來獲取歷史數據(每一行的歷史數據能夠被刪除,而後經過Hbase compactions就能夠釋放出空間)。雖然HBase包括表格,可是schema僅僅被表格和列簇所要求,列不須要schema。Hbase的表格包括增長/計數功能。網站

 

 

3. 限制日誌

  Hive目前不支持更新操做。另外,因爲hive在hadoop上運行批量操做,它須要花費很長的時間,一般是幾分鐘到幾個小時才能夠獲取到查詢的結果。Hive必須提供預先定義好的schema將文件和目錄映射到列,而且Hive與ACID不兼容。htm

    HBase查詢是經過特定的語言來編寫的,這種語言須要從新學習。類SQL的功能能夠經過Apache Phonenix實現,但這是以必須提供schema爲代價的。另外,Hbase也並非兼容全部的ACID特性,雖然它支持某些特性。最後但不是最重要的--爲了運行Hbase,Zookeeper是必須的,zookeeper是一個用來進行分佈式協調的服務,這些服務包括配置服務,維護元信息和命名空間服務。

 

 

4. 應用場景

    Hive適合用來對一段時間內的數據進行分析查詢,例如,用來計算趨勢或者網站的日誌。Hive不該該用來進行實時的查詢。由於它須要很長時間才能夠返回結果。

    Hbase很是適合用來進行大數據的實時查詢。Facebook用Hbase進行消息和實時的分析。它也能夠用來統計Facebook的鏈接數。

 

 

5. 總結

    Hive和Hbase是兩種基於Hadoop的不一樣技術--Hive是一種類SQL的引擎,而且運行MapReduce任務,Hbase是一種在Hadoop之上的NoSQL 的Key/vale數據庫。固然,這兩種工具是能夠同時使用的。就像用Google來搜索,用FaceBook進行社交同樣,Hive能夠用來進行統計查詢,HBase能夠用來進行實時查詢,數據也能夠從Hive寫到Hbase,設置再從Hbase寫回Hive。

 

 

 

 

 

  通常,HBase是基於內存的,確定速度要比Hive快。

 

 

 

 

 

 

 

    若是你想要有join操做,那你就別用HBase,由於它不支持!

相關文章
相關標籤/搜索