Hive和數據庫除了擁有類似的查詢語言,再無類似之處。
數據庫可以用在Online的應用中,但是Hive是為數據倉庫而設計的(由於數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。)
1.
由於 Hive 是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。因此,Hive 中不支持對數據的改寫和添加,所有的數據都是在加載的時候中確定好的。而數據庫中的數據通常是需要經常進行修改的,因此可以使用 INSERT INTO ... VALUES 添加數據,使用 UPDATE ... SET 修改數據。
Hive的加載,是將整個文件加載到對應的HDFS中,不會對數據本身有任何修改。可以簡單理解為:hive的元數據,對應的是文件的位置,數據庫對應的是文件里面內容的位置。
Hive 在加載的過程中不會對數據本身進行任何修改,而只是將數據內容復制或者移動到相應的 HDFS 目錄中。而在數據庫中,不同的數據庫有不同的存儲引擎,定義了自己的數據格式。所有數據都會按照一定的組織存儲,因此,數據庫加載數據的過程會比較耗時。
2.
索引。之前已經說過,Hive 在加載數據的過程中不會對數據進行任何處理,甚至不會對數據進行掃描,因此也沒有對數據中的某些 Key 建立索引。Hive 要訪問數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲較高。由於 MapReduce 的引入, Hive 可以並行訪問數據,因此即使沒有索引,對於大數據量的訪問,Hive 仍然可以體現出優勢。數據庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的數據的訪問,數據庫可以有很高的效率,較低的延遲。由於數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。
Hive 在查詢數據的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另外一個導致 Hive 執行延遲高的因素是 MapReduce 框架。由於 MapReduce 本身具有較高的延遲,因此在利用 MapReduce 執行 Hive 查詢時,也會有較高的延遲。相對的,數據庫的執行延遲較低。當然,這個低是有條件的,即數據規模較小,當數據規模大到超過數據庫的處理能力的時候,Hive 的並行計算顯然能體現出優勢。
3.
由於 Hive 建立在集群上並可以利用 MapReduce 進行並行計算,因此可以支持很大規模的數據;對應的,數據庫可以支持的數據規模較小。
界上最大的 Hadoop 集群在 Yahoo!,2009年的規模在 4000 台節點左右
目前最先進的並行數據庫 Oracle 在理論上的擴展能力也只有 100 台左右。
Hive是一個應用層的東西,定位是數據倉庫,所偏向的是數據分析,存儲和計算的方向,其本質是mapreduce。
Hive的應用場景
1》數據挖掘:
1.數據用戶行為分析
2.興趣分區
3.區域展示
2》非實時分析
1.日志分析
2.文本分析
3》數據匯總
1.每天/每周用戶點擊數
2.流量統計
3》作為數據倉庫(這也是我在公司接觸的最多的數據分析的場景)
1.數據抽取
2.數據加載
3.數據轉換
Hive缺點:
1》延遲很高:
1.默認M/R執行引擎
2.M/R啟動有所延遲
2》暫不支持列級,別的數據增加,更新,刪除操作。
3》暫不支持存儲過程
關系型數據庫:Mysql,Oracle
非關系型數據庫:Redis,MongoDB,HBASE
類SQL數據庫:hive
具體地:
關系型數據庫(Mysql和Oracle)
1.表和表、表和字段、數據和數據存在着關系
優點:
1.數據之間有關系,進行數據的增刪改查的時候是非常方便的
2.關系型數據庫是有事務操作的,保證數據的完整性和一致性。
缺點:
1.因為數據和數據是有關系的,底層是運行了大量的算法
大量算法會降低系統的效率,會降低性能
2.面對海量數據的增刪改查的時候會顯的無能為力
3.海量數據對數據進行維護變得非常的無力
適合處理一般量級的數據(銀行轉賬和錢)
非關系數據庫的(redis和MangDB)
為了處理海量數據,非關系數據庫設計之初就是為了替代關系型數據庫的關系
查找key---value的時候:entry(即一條K-V記錄)默認是按照key的字典順序存儲的,當然開發者也可以重載這個排序函數;
優點:
1.海量數據的增刪改查是可以的
2.海量數據的維護和處理非常輕松
缺點:
1.數據和數據沒有關系,他們之間就是單獨存在的
2.非關系數據庫沒有關系,沒有強大的事務關系,沒有保證數據的完整性和安全性
適合處理海量數據,保證效率,不一定安全(統計數據,例如微博數據)
總之:
1.關系型數據庫支持SQL語句的查詢,增刪改查非常方便,並且支持多表的join操作,相比非關系型數據庫速度比較慢
2.非關系型數據庫讀寫非常快,但是不支持增刪改查的操作
3.hive數據倉庫是元數據和客戶端的形式,將數據存儲在HDFS上的。但是Hive 中不支持對數據的改寫和添加,所有的數據都是在加載的時候中確定好的。
4.非關系型數據庫的數是存儲在內存中的,關系型數據庫的數據是存儲在磁盤的
Hive query就是MapReduce jobs可以從5分鍾到數小時不止,HBase是非常高效的,肯定比Hive高效的多。
Hive本身不存儲和計算數據,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯。hive需要用到hdfs存儲文件,需要用到MapReduce計算框架。
hbase是物理表,不是邏輯表,提供一個超大的內存hash表,搜索引擎通過它來存儲索引,方便查詢操作。
hbase是列存儲。