为什么需要MapReduce?
我們為什么不能使用數據庫來對大量磁盤上的大規模數據進行批量分析呢?我們為什么需要MapReduce?
這些問題的答案來自磁盤的另一個發展趨勢:尋址時間的提高遠遠慢于傳輸速率的提高。尋址是將磁頭移動到特定磁盤位置進行讀寫操作的過程。它是導致磁盤操作延遲的主要原因,而傳輸速率取決于磁盤的帶寬。
?
如果數據的訪問模式中包含大量的磁盤尋址,那么讀取大量數據集所花的時間勢必會更長(相較于流式數據讀取模式),流式讀取主要取決于傳輸速率。另一方面,如果數據庫系統只更新一小部分記錄,那么傳統的B樹更有優勢(關系型數據庫中使用的一種數據結構,受限于尋址的比例)。但數據庫系統更新大部分數據時,B樹的效率比MapReduce低得多,因為需要使用“ 排序/合并“(sort/merge)來重建數據庫。
?
在許多情況下,可以將MapReduce視為關系型數據庫管理系統的補充。兩個系統之間的差異如表1-1所示。MapReduce比較適合以批處理的方式處理需要分析整個數據集的問題,尤其是即席分析。RDBMS適用于“點查詢”(point query)和 更新,數據集被索引后,數據庫系統能夠提供低延遲的數據檢索和快速的少量數據更新。MapReduce 適合一次寫人、多次讀取數據的應用,而關系型數據庫更適合持續更新的數據集。
?
【補充】即席查詢(Ad Hoc)是用戶根據自己的需求,靈活的選擇查詢條件,系統能夠根據用戶的選擇生成相應的統計報表。即席查詢與普通應用查詢最大的不同是普通的應用查詢是定制開發的,而即席查詢是由用戶自定義查詢條件的。
?
MapReduce和關系型數據庫之間的另一個區別在于它們所操作的數據集的結構化程度。結構化數據(structured data)是 具有既定格式的實體化數據,諸如XML文檔或滿足特定預定義格式的數據庫表。這是RDBMS包括的內容。另一方面,半結構化數據(semi-structured data)比較松散,雖然可能有格式,但經常被忽略,所以它只能用作對數據結構的般指導。 例如,一張電子表格, 其結構是由單元格組成的網格,但是每個單元格自身可保存任何形式的數據。非結構化數據(unstructured data)沒有什么特別的內部結構,例如純文本或圖像數據。MapReduce對于非結構化或半結構化數據非常有效,因為在處理數據時才對數據進行解釋。
換句話說:MapReduce輸人的鍵和值并不是數據固有的屬性,而是由分析數據的人員來選擇的。
?
關系型數據往往是規范的(normalized),以保持其數據的完整性且不含冗余。規范化給MapReduce 帶來了問題,因為它使記錄讀取成為異地操作,然而MapReduce的核心假設之一就是,它可以進行(高速的)流式讀寫操作。
?
Web服務器日志是一個典型的非規范化數據記錄(例如,每次都需要記錄客戶端主機全名,導致同一客戶端全名可能會多次出現),這也是MapReduce 非常適合用于分析各種日志文件的原因之一。
?
MapReduce是一種線性可伸縮的編程模型。程序員編寫兩個函數,分別為map 函數和reduce 函數每 個函數定義一個鍵/值對集合到另一個鍵值對集合的映射。
?
這些函數無需關注數據集及其所用集群的大小,因此可以原封不動地應用到小規模數據集或大規模的數據集上。更重要的是,如果輸入的數據量是原來的兩倍,那么運行的時間也需要兩倍。但是如果集群是原來的兩倍,作業的運行仍然與原來一樣快。SQL查詢一般不具備該特性。
?
但是在不久的將來,關系型數據庫系統和MapReduce系統之間的差異很可能變得模糊。關系型數據庫都開始吸收MapReduce 的一一些思路(如Aster DATA的和GreenPlum的數據庫),另一方面,基于MapReduce的高級查詢語言(如Pig和Hive)使MapReduce的系統更接近傳統的數據庫編程方式。。
?
摘自:hadoop權威指南(第二版)
總結
以上是生活随笔為你收集整理的为什么需要MapReduce?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何设计第三方账号登陆?
- 下一篇: spring security简单教程以