MapReduce是一個基於java的、分布式的執行框架內Apache Hadoop生態係統。它帶走了分布式編程的複雜性,讓開發人員實現的兩個處理步驟:1)和2)減少地圖。分離映射步驟,數據並行處理任務。轉換邏輯可以應用於每個塊的數據。一旦完成,減少階段接管處理聚集數據從地圖上設置. .一般來說,MapReduce的用途Hadoop分布式文件係統(HDFS)輸入和輸出。然而,一些技術之上,如Sqoop,允許訪問關係係統。
MapReduce是在穀歌的城牆開發早在2004年,傑弗瑞迪恩和桑傑穀歌格瑪沃特(Dean &格瑪沃特,2004)。在他們的論文中,“MAPREDUCE:簡化數據處理大型集群,“和靈感來自於map和reduce函數在函數式編程中常用的。當時,穀歌專有MapReduce係統運行在Google文件係統(GFS)。2014年,穀歌不再使用MapReduce作為他們的主要大數據處理模型。MapReduce曾經是唯一的方法,通過這種方法可以檢索數據存儲在HDFS,但情況已不再是這樣。今天,有其他基於查詢係統等蜂巢和豬用於檢索數據使用sql語句從HDFS運行書麵使用MapReduce模型一起工作。
MapReduce係統通常是由三個步驟組成的(即使它是廣義的組合Map和Reduce操作/功能)。MapReduce操作:
剛性地圖減少編程範式
而暴露和減少接口映射到程序員簡化了分布式應用程序的創建Hadoop,很難表達廣泛的邏輯地圖減少編程範式。迭代過程是邏輯的一個例子,並不適用於地圖減少。一般來說,數據沒有保存在內存中,迭代邏輯是由鏈接MapReduce應用程序一起導致增加了複雜性。
讀/寫密集型
MapReduce工作在內存中存儲一些數據,因為它沒有用戶數據的分布式內存結構的概念。HDFS數據必須讀取和寫入。更複雜的MapReduce應用程序涉及到鏈接小MapReduce工作在一起。因為之間的數據不能通過這些工作,它需要通過HDFS數據共享。這引入了一個處理瓶頸。
Java集中
MapReduce是基於java的,因此最有效的方式為它將使用java編寫應用程序。其代碼必須整理在一個單獨的開發環境,然後部署到Hadoop集群。這種風格的發展不是廣泛采用數據分析師和數據科學家用於其他技術如Python像SQL或解釋型語言。MapReduce的確有能力調用Map / Reduce邏輯等其他語言編寫的C、Python或Shell腳本。然而,它通過旋轉一個係統進程來處理這些程序的執行。這個操作介紹工作的開銷將影響性能。
從大數據產品淘汰
MapReduce是大數據產品逐漸被淘汰。雖然有些廠商還包括它在Hadoop分布,這一切都是為了讓遺留應用程序的支持。beplay体育app下载地址客戶已不再創建MapReduce應用程序,而不是采用更簡單和更快的這樣的框架Apache火花。
遺留應用程序和Hadoop本機工具如Sqoop和豬今天利用MapReduce。有非常有限的MapReduce應用程序開發也沒有任何重大貢獻它為開源技術。
磚三角洲引擎是基於Apache火花和c++引擎調用光子。這允許DAG處理MapReduce缺乏的靈活性,從內存中處理速度和專業,本地編譯引擎,提供了極其快速查詢響應時間。用戶可以與磚三角洲引擎使用Python, Scala, R,或SQL。現有火花應用程序可以修改使用達美航空發動機用簡單的線條變化即指定“δ”數據格式。MapReduce和HDFS,本地不支持事務一致性的數據,也沒有能力在數據集更新/刪除現有的數據。三角洲引擎允許並發訪問數據,數據生產者和消費者,還提供完整的CRUD功能。最後,MapReduce並不擁有內置的功能來處理小文件,在任何大數據環境中一個常見問題。磚三角洲引擎auto-compaction,優化數據寫入存儲的大小。它也有一個優化命令可以壓縮文件的需求。三角洲的事務一致性特性,此操作可以在數據被發布由最終用戶或應用程序訪問。