大數據中 MapReduce 的介紹指南

已發表: 2022-09-21

MapReduce 提供了一種有效、更快且具有成本效益的應用程序創建方式。

該模型利用並行處理、數據局部性等先進概念,為程序員和組織提供了很多好處。

但是市場上有太多的編程模型和框架可供選擇,以至於很難選擇。

當談到大數據時,你不能隨便選擇任何東西。 您必須選擇可以處理大量數據的技術。

MapReduce 是一個很好的解決方案。

在本文中,我將討論 MapReduce 的真正含義以及它如何帶來好處。

開始吧!

什麼是 MapReduce?

MapReduce 是 Apache Hadoop 框架內的一個編程模型或軟件框架。 它用於創建能夠在具有容錯性和可靠性的數千個節點(稱為集群或網格)上並行處理大量數據的應用程序。

這種數據處理髮生在存儲數據的數據庫或文件系統上。 MapReduce 可以與 Hadoop 文件系統 (HDFS) 一起使用來訪問和管理大量數據。

該框架由 Google 於 2004 年推出,並由 Apache Hadoop 推廣。 它是 Hadoop 中的處理層或引擎,運行以不同語言(包括 Java、C++、Python 和 Ruby)開發的 MapReduce 程序。

雲計算中的 MapReduce 程序是並行運行的,因此適合進行大規模的數據分析。

apchaehadoopmapreduce

MapReduce 旨在使用“map”和“reduce”函數將任務拆分為更小的多個任務。 它將映射每個任務,然後將其減少為幾個等效的任務,從而降低集群網絡的處理能力和開銷。

示例:假設您正在為一屋子的客人準備一頓飯。 因此,如果您嘗試準備所有菜餚並自己完成所有過程,那將變得忙碌且耗時。

但是假設您讓您的一些朋友或同事(不是客人)通過將不同的流程分配給可以同時執行任務的另一個人來幫助您準備餐點。 在這種情況下,當您的客人還在家裡時,您將更快、更輕鬆地準備餐點。

MapReduce 以類似的方式與分佈式任務和並行處理一起工作,以更快、更輕鬆地完成給定任務。

Apache Hadoop 允許程序員利用 MapReduce 在大型分佈式數據集上執行模型,並使用先進的機器學習和統計技術來查找模式、進行預測、發現相關性等。

MapReduce 的特點

MapReduce 的一些主要特性是:

  • 用戶界面:您將獲得一個直觀的用戶界面,提供有關每個框架方面的合理詳細信息。 它將幫助您無縫地配置、應用和調整您的任務。
用戶界面
  • 有效負載:應用程序利用 Mapper 和 Reducer 接口來啟用 map 和 reduce 功能。 Mapper 將輸入鍵值對映射到中間鍵值對。 Reducer 用於減少與其他較小值共享一個鍵的中間鍵值對。 它執行三個功能——排序、洗牌和歸約。
  • Partitioner:它控制中間映射輸出鍵的劃分。
  • Reporter:這是一個報告進度、更新計數器和設置狀態消息的功能。
  • Counters:它表示 MapReduce 應用程序定義的全局計數器。
  • OutputCollector:此函數從 Mapper 或 Reducer 收集輸出數據,而不是從中間輸出。
  • RecordWriter:將數據輸出或鍵值對寫入輸出文件。
  • DistributedCache:它有效地分發特定於應用程序的較大的只讀文件。
  • 數據壓縮:應用程序編寫者可以壓縮作業輸出和中間映射輸出。
  • 錯誤記錄跳過:您可以在處理地圖輸入時跳過幾條錯誤記錄。 這個特性可以通過類——SkipBadRecords 來控制。
  • 調試:您將獲得運行用戶定義腳本和啟用調試的選項。 如果 MapReduce 中的任務失敗,您可以運行調試腳本並查找問題。

MapReduce 架構

建築學

讓我們通過深入了解 MapReduce 的組件來了解其架構:

  • 作業: MapReduce 中的作業是 MapReduce 客戶端想要執行的實際任務。 它包含幾個較小的任務,這些任務結合起來形成最終任務。
  • 作業歷史服務器:它是一個守護進程,用於存儲和保存有關應用程序或任務的所有歷史數據,例如在執行作業之後或之前生成的日誌。
  • 客戶端:客戶端(程序或 API)將作業帶到 MapReduce 執行或處理。 在 MapReduce 中,一個或多個客戶端可以不斷地將作業發送到 MapReduce Manager 進行處理。
  • MapReduce Master: MapReduce Master 將作業分成幾個較小的部分,確保任務同時進行。
  • Job Parts:子作業或作業部分是通過劃分主作業得到的。 它們被處理並最終組合以創建最終任務。
  • 輸入數據:它是提供給 MapReduce 用於任務處理的數據集。
  • 輸出數據:任務處理後得到的最終結果。

所以,在這個架構中真正發生的是客戶端向 MapReduce Master 提交一個作業,它把它分成更小、相等的部分。 這使作業能夠更快地處理,因為較小的任務需要更少的時間來處理而不是較大的任務。

但是,請確保任務不會被劃分為太小的任務,因為如果這樣做,您可能不得不面對更大的管理拆分開銷並為此浪費大量時間。

接下來,作業部分可用於繼續執行 Map 和 Reduce 任務。 此外,Map 和 Reduce 任務具有基於團隊正在處理的用例的合適程序。 程序員開發基於邏輯的代碼來滿足要求。

mapreduce架構

在此之後,輸入數據被饋送到 Map Task,以便 Map 可以快速生成輸出作為鍵值對。 不是將這些數據存儲在 HDFS 上,而是使用本地磁盤存儲數據以消除複製的機會。

任務完成後,您可以丟棄輸出。 因此,當您將輸出存儲在 HDFS 上時,複製將變得過大。 每個 map 任務的輸出將被饋送到 reduce 任務,map 輸出將提供給運行 reduce 任務的機器。

接下來,輸出將被合併並傳遞給用戶定義的reduce函數。 最後,減少的輸出將存儲在 HDFS 上。

此外,根據最終目標,該​​過程可以有多個 Map 和 Reduce 任務用於數據處理。 Map 和 Reduce 算法經過優化,可將時間或空間複雜度保持在最低水平。

由於 MapReduce 主要涉及 Map 和 Reduce 任務,因此有必要進一步了解它們。 因此,讓我們討論 MapReduce 的各個階段,以清楚地了解這些主題。

MapReduce 的階段

地圖

在這個階段,輸入數據被映射到輸出或鍵值對。 這裡,key 可以引用地址的 id,而 value 可以是該地址的實際值。

地圖階段

在這個階段只有一個但兩個任務——拆分和映射。 拆分是指從主要作業中分離出來的子部分或作業部分。 這些也稱為輸入拆分。 因此,輸入拆分可以稱為映射消耗的輸入塊。

接下來,進行映射任務。 它被認為是執行 map-reduce 程序的第一階段。 在這裡,每個拆分中包含的數據將被傳遞給 map 函數以處理和生成輸出。

函數 – Map() 在輸入鍵值對的內存存儲庫中執行,生成中間鍵值對。 這個新的鍵值對將作為輸入提供給 Reduce() 或 Reducer 函數。

減少

在映射階段獲得的中間鍵值對作為 Reduce 函數或 Reducer 的輸入。 與映射階段類似,涉及兩個任務——shuffle 和 reduce。

因此,獲得的鍵值對被排序和打亂以饋送到Reducer。 接下來,Reducer 根據開發者編寫的 reducer 算法,根據其鍵值對對數據進行分組或聚合。

在這裡,來自混洗階段的值被組合以返回輸出值。 這個階段總結了整個數據集。

減少階段

現在,執行 Map 和 Reduce 任務的完整過程由一些實體控制。 這些是:

  • Job Tracker:簡單來說,Job Tracker 就是一個負責完整執行提交的作業的 master。 作業跟踪器管理集群中的所有作業和資源。 此外,作業跟踪器會安排在特定數據節點上運行的任務跟踪器上添加的每個地圖。
  • 多任務跟踪器:簡單來說,多任務跟踪器作為從站工作,按照 Job Tracker 的指令執行任務。 任務跟踪器分別部署在集群中執行 Map 和 Reduce 任務的每個節點上。

它之所以有效,是因為一個作業將被分成幾個任務,這些任務將在集群的不同數據節點上運行。 Job Tracker 負責通過調度任務並在多個數據節點上運行來協調任務。 接下來,位於每個數據節點上的任務跟踪器執行部分作業並處理每個任務。

此外,任務跟踪器向作業跟踪器發送進度報告。 此外,Task Tracker 會定期向 Job Tracker 發送“心跳”信號,並通知他們系統狀態。 如果發生任何故障,作業跟踪器能夠在另一個任務跟踪器上重新安排作業。

輸出階段:當您到達此階段時,您將擁有從 Reducer 生成的最終鍵值對。 您可以使用輸出格式化程序來轉換鍵值對並在記錄器的幫助下將它們寫入文件。

為什麼使用 MapReduce?

以下是 MapReduce 的一些好處,解釋了必須在大數據應用程序中使用它的原因:

並行處理

並行處理

您可以將作業劃分為不同的節點,每個節點同時處理 MapReduce 中該作業的一部分。 因此,將較大的任務分成較小的任務會降低複雜性。 此外,由於不同的任務在不同的機器而不是單台機器上並行運行,因此處理數據所需的時間顯著減少。

數據局部性

在 MapReduce 中,您可以將處理單元移動到數據中,而不是相反。

在傳統方式中,數據被帶到處理單元進行處理。 然而,隨著數據的快速增長,這一過程開始帶來許多挑戰。 其中一些是成本更高、更耗時、主節點負擔、故障頻繁和網絡性能下降。

但是 MapReduce 通過採用相反的方法來幫助克服這些問題——將處理單元引入數據。 這樣,數據就會分佈在不同的節點之間,每個節點都可以處理部分存儲的數據。

結果,它提供了成本效益並減少了處理時間,因為每個節點與其相應的數據部分並行工作。 此外,由於每個節點都處理部分數據,因此不會有節點負擔過重。

安全

安全地圖減少

MapReduce 模型提供了更高的安全性。 它有助於保護您的應用程序免受未經授權的數據的影響,同時增強集群安全性。

可擴展性和靈活性

MapReduce 是一個高度可擴展的框架。 它允許您使用數千 TB 的數據從多台機器上運行應用程序。 它還提供了處理結構化、半結構化或非結構化以及任何格式或大小的數據的靈活性。

簡單

您可以使用任何編程語言(如 Java、R、Perl、Python 等)編寫 MapReduce 程序。 因此,任何人都可以輕鬆學習和編寫程序,同時確保滿足其數據處理要求。

MapReduce 的用例

  • 全文索引: MapReduce 用於執行全文索引。 它的 Mapper 可以映射單個文檔中的每個單詞或短語。 而Reducer 用於將所有映射的元素寫入索引。
  • 計算 Pagerank: Google 使用 MapReduce 來計算 Pagerank。
  • 日誌分析: MapReduce 可以分析日誌文件。 當映射器搜索訪問的網頁時,它可以將大型日誌文件分成不同的部分或拆分。

如果在日誌中發現了一個網頁,一個鍵值對將被提供給 reducer。 這裡,網頁將是鍵,索引“1”是值。 給Reducer一個鍵值對後,各種網頁會被聚合起來。 最終輸出是每個網頁的總點擊次數。

日誌分析
  • Reverse Web-Link Graph:該框架還可以在 Reverse Web-Link Graph 中找到用途。 在這裡, Map() 產生 URL 目標和源,並從源或網頁獲取輸入。

接下來,Reduce() 聚合與目標 URL 關聯的每個源 URL 的列表。 最後,它輸出源和目標。

  • 字數統計: MapReduce 用於計算一個單詞在給定文檔中出現的次數。
  • 全球變暖:組織、政府和公司可以使用 MapReduce 解決全球變暖問題。

例如,您可能想了解由於全球變暖導致海洋溫度升高的情況。 為此,您可以在全球範圍內收集數以千計的數據。 數據可以是高溫、低溫、緯度、經度、日期、時間等。這將需要幾個map和reduce任務來使用MapReduce計算輸出。

  • 藥物試驗:傳統上,數據科學家和數學家共同開發一種可以對抗疾病的新藥。 隨著算法和 MapReduce 的傳播,組織中的 IT 部門可以輕鬆解決只有超級計算機博士才能處理的問題。 科學家等。現在,您可以檢查一種藥物對一組患者的有效性。
  • 其他應用程序: MapReduce 甚至可以處理在其他情況下不適合關係數據庫的大規模數據。 它還使用數據科學工具,並允許在不同的分佈式數據集上運行它們,這在以前只能在一台計算機上實現。

由於 MapReduce 的穩健性和簡單性,它在軍事、商業、科學等領域都有應用。

結論

MapReduce 可以證明是技術上的突破。 這不僅是一個更快、更簡單的過程,而且具有成本效益且耗時更少。 鑑於其優勢和不斷增加的使用率,它可能會見證跨行業和組織的更高采用率。

您還可以探索一些學習大數據和 Hadoop 的最佳資源。