【大數據2025】MapReduce

在這里插入圖片描述

MapReduce 基礎介紹

  • 起源與發展:是 2004 年 10 月谷歌發表的 MAPREDUCE 論文的開源實現,最初用于大規模網頁數據并行處理,現成為 Hadoop 核心子項目之一,是面向批處理的分布式計算框架。
  • 基本原理:分為 map 和 reduce 兩個階段。map 階段將計算任務分發到數據節點并行運算,各節點得出部分結果;reduce 階段匯總部分結果得到最終結果,體現分而治之與并行運算思想,遵循計算跟著數據走、移動計算而非數據的原則。

MapReduce 特點

  • 計算與數據關系:計算任務移動到數據所在節點,數據不動,降低分布式編程門檻。
  • 擴展性:具有良好擴展性,隨著節點增加,存儲和計算能力近乎線性遞增。

MapReduce 適用場景

  • 離線批處理任務:適合海量數據離線批處理,如數據統計(PVUV 統計)、搜索引擎索引構建、海量數據查詢、復雜數據分析算法實現等。

MapReduce 不適用場景

  • 實時性要求高的場景:不適合毫秒或秒級返回結果的場景,如 OLAP、流計算,因其計算效率達不到實時性要求,且無法處理無界數據集和支持實時計算模式。
  • DAG 運算場景:不能進行有向無環圖(DAG)運算,由于中間結果需落盤、讀盤和網絡傳輸,導致延遲高、效率低。

MapReduce 與 Spark 在 DAG 運算上的對比

  • MapReduce 的劣勢:做 DAG 運算慢,中間結果落盤、讀盤和網絡傳輸過程繁瑣,效率低。
  • Spark 的優勢:支持 DAG 運算,數據存于內存,可直接將結果給到下一個任務計算,速度快,但存在內存不足問題。

MAPREDUCE 作業運行原理與詞頻統計示例

在這里插入圖片描述

  • 以詞頻統計展示 MAPREDUCE 作業運行原理,即統計英文文本中單詞出現頻率。
  • 若文本存于 HDFS,其自動進行 split 操作;若未存于 HDFS,則按 128 兆一塊進行數據塊拆分,每個數據塊啟動一個 map task。

map 任務處理過程

  • map task 將每行文本按空格拆分單詞,把單詞作為 K,給每個單詞標 value 值為 1,形成 K-V 形式中間結果。

reduce 節點聚合操作

  • 把相同 K 的數據分發到同一個 reduce 節點進行聚合,將相同 K 的 value 值累加得到最終詞頻結果,其中難點在于如何把相同 K 分發到同一 reduce,此過程需經過 shuffle(洗牌)階段。

哈希取模分發機制

  • shuffle 階段通過哈希取模實現分發,先將字符串形式的 K 進行數字編碼,再對 reducer 個數進行哈希取模(即轉換后的數字除以 reducer 個數取余數),余數對應相應的 reduce 節點,以此保證相同 K 能聚合到同一 reducer。

生產中 reduce 個數設置

  • 生產中 reduce 個數可手動指定,實際應用中可能不像示例中有較多 reduce,如可能只有兩個 reduce,此時單詞會按哈希取模結果分發到這兩個 reduce 中進行處理。

在這里插入圖片描述

map reduce 執行流程

  • 文件拆分與 map 任務啟動:文件上傳至 HDFS 后會自動進行 split,拆分成多個 block,每個 block 啟動一個 map 任務。
  • map 任務處理與分組:map 任務處理數據得到 key-value 結果,并依據 key 對 reduce 個數進行哈希取模分組。例如有三個 reduce,則按對三取模結果分為三組。
  • reduce 任務拉取與處理:reduce 任務啟動 fetch 線程,從各 map 拉取對應組數據,將來自多個地方的同組數據合并為一個大文件后,對文件按 key 進行 reduce 處理(如詞頻統計中對相同 key 的 value 累加求和),每個 reducer 會輸出一個結果文件存于同一目錄下,這些文件總和即為最終結果。

執行階段劃分

  • 按任務劃分:分為 map task 和 reduce task。
  • 按運行階段劃分:包括 split 階段、shuffle 階段、reduce 階段及輸出階段。其中 shuffle 階段由 map task 和 reduce task 共同完成,map task 負責對內存緩存區(100 兆,達 80%即 80 兆時觸發)的數據進行分組排序并落盤,可能產生多個小文件后再合并成大文件;reduce task 從 map 拉取數據到緩存(有閾值,超閾值也會落盤),同樣要對數據合并、分組排序后再進行 reduce 處理。

shuffle 階段詳細分析

在這里插入圖片描述

  • map 端操作:map 運算結果存放在 100 兆內存緩存區,達到 80 兆時觸發溢寫到磁盤,同時進行分組排序,根據 reduce 個數哈希取模分組并在組內排序,多次溢寫會生成多個分組有序小文件,最后需合并成大的分組有序文件。
  • reduce 端操作:reduce 啟動 fetch 線程從 map 拉取數據到緩存,緩存達到閾值后溢寫生成小文件,再合并成大文件并進行分組排序(按 K 值分組排序),最后對分組有序文件進行 reduce 處理。
  • 效率問題:shuffle 階段是 map reduce 執行慢的關鍵。其在 map 和 reduce 過程中大量數據落盤,且 reduce 拉取數據時存在大量網絡傳輸,內存緩存使用量小(僅幾百兆),頻繁與磁盤交互及網絡傳輸導致整體效率低下。

作業提交與運行

  • 提交方式:使用 hadoop -jar 命令提交作業,需指定 jar 包名稱及要運行的主類名,并可添加參數。例如,官方示例包中運行 MAREDUCE 作業統計π值時,需按此方式提交。
  • 作業管理:通過 yarn application - list 查看作業運行情況,用 yarn application -kill 取消作業。
    在這里插入圖片描述

作業運行監控

  • 運行狀態顯示:作業提交后會生成作業 id,運行時控制臺會實時顯示 map 和 reduce 的進度信息。需注意,按 CTRL + C 只能中斷控制臺輸出,無法終止后臺作業。
  • 可視化監控:可訪問yarn集群主節點的 8088 端口進入可視化監控頁面,在 applications 中找到正在運行的作業,點擊作業 id 查看詳細運行情況。

在這里插入圖片描述

日志查看與排錯

在這里插入圖片描述

  • 查看途徑:除可視化界面外,可在作業運行節點查找日志。運維人員可登錄節點,依據 yarn node manager 相關配置找到日志存儲目錄(通常在 log 目錄下),查看作業輸出日志以分析運行狀況。普通用戶一般通過可視化界面查看日志。
  • 排錯方法:從日志信息中排查和解決作業運行問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66474.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66474.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66474.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

主從復制

簡述mysql 主從復制原理及其工作過程,配置一主兩從并驗證。 主從原理:MySQL 主從同步是一種數據庫復制技術,它通過將主服務器上的數據更改復制到一個或多個從服務器,實現數據的自動同步。 主從同步的核心原理是將主服務器上的二…

【博客之星評選】2024年度前端學習總結

故事的開端...始于2024年第一篇前端技術博客 那故事的終末...也該結束于陪伴了我一整年的前端知識了 踏入 2025 年,滿心激動與自豪,我成功闖進了《2024 年度 CSDN 博客之星總評選》的 TOP300。作為一名剛接觸技術寫作不久的萌新,這次能走到這…

Ubuntu 24.04 LTS 服務器折騰集

目錄 Ubuntu 更改軟件源Ubuntu 系統語言英文改中文windows 遠程鏈接 Ubuntu 圖形界面Windows 通過 openssh 連接 UbuntuUbuntu linux 文件權限Ubuntu 空閑硬盤掛載到 文件管理器的 other locationsUbuntu 開啟 SMB 服務,并通過 windows 訪問Ubuntu安裝Tailscale&am…

《TikTok停服:信息安全警鐘長鳴》

一、TikTok 停服事件回顧 2025 年 1 月 18 日晚,TikTok 通知美國用戶,由于美官方禁令于 19 日起生效,TikTok 軟件將暫時對用戶停止服務。這一消息猶如一顆重磅炸彈,瞬間在全球范圍內掀起軒然大波。美國用戶對此猝不及防&#xff0…

1166 Summit (25)

A summit (峰會) is a meeting of heads of state or government. Arranging the rest areas for the summit is not a simple job. The ideal arrangement of one area is to invite those heads so that everyone is a direct friend of everyone. Now given a set of tenta…

圖論DFS:黑紅樹

我的個人主頁 {\large \mathsf{{\color{Red} 我的個人主頁} } } 我的個人主頁 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:記憶化搜索DFS 算法&#xf…

C++,設計模式,【目錄篇】

文章目錄 1. 簡介2. 設計模式的分類2.1 創建型模式(Creational Patterns):2.2 結構型模式(Structural Patterns):2.3 行為型模式(Behavioral Patterns): 3. 使用設計模式…

掌握提示詞工程:大模型使用入門指南

掌握提示詞工程:大模型使用入門指南 近年來,大語言模型(如 GPT、Claude 等)的強大能力令人印象深刻,但要想充分發揮這些模型的潛力,僅僅依靠其預訓練能力還不夠。提示詞工程(Prompt Engineerin…

如何使用 useMemo 和 memo 優化 React 應用性能?

使用 useMemo 和 memo 優化 React 應用性能 在構建復雜的 React 應用時,性能優化是確保應用流暢運行的關鍵。React 提供了多種工具來幫助開發者優化組件的渲染和計算邏輯,其中 useMemo 和 memo 是兩個非常有用的 Hook。本文將詳細介紹這兩個工具的使用方…

Agent Laboratory: Using LLM Agents as Research Assistants 論文簡介

加速機器學習研究的智能實驗室——Agent Laboratory 1. 引言 隨著人工智能技術的飛速發展,機器學習領域正以前所未有的速度推進科學發現和技術創新。然而,傳統的科學研究模式往往受到時間、資源和專業知識限制,阻礙了研究者們探索新想法的能…

【網絡協議】【http】【https】ECDHE-TLS1.2

【網絡協議】【http】【https】ECDHE-TLS1.2 ECDHE算法 1.客戶端和服務器端事先確定好使用哪種橢圓曲線,和曲線上的基點G,這兩個參數都是公開的, 雙方各自隨機生成一個隨機數作為私鑰d,并與基點 G相乘得到公鑰Q(QdG)&#xff0c…

規避路由沖突

路由沖突是指在網絡中存在兩個或多個路由器在進行路由選擇時出現矛盾,導致網絡數據包無法正確傳輸,影響網絡的正常運行。為了規避路由沖突,可以采取以下措施: 一、合理規劃IP地址 分配唯一IP:確保每個設備在網絡中都有…

項目實戰--網頁五子棋(游戲大廳)(3)

我們的游戲大廳界面主要需要包含兩個功能&#xff0c;一是顯示用戶信息&#xff0c;二是匹配游戲按鈕 1. 頁面實現 hall.html <!DOCTYPE html> <html lang"ch"> <head><meta charset"UTF-8"><meta name"viewport"…

大模型UI:Gradio全解11——Chatbot:融合大模型的聊天機器人(4)

大模型UI&#xff1a;Gradio全解11——Chatbot&#xff1a;融合大模型的聊天機器人&#xff08;4&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模態聊天機器人11.4 使用Blocks創建自定義聊天機器人11.4.1 簡單聊天機器人演示11.4.2 立即響應和流式傳輸11.4.…

【線性代數】行列式的概念

d e t ( A ) ∑ i 1 , i 2 , ? , i n ( ? 1 ) σ ( i 1 , ? , i n ) a 1 , i 1 a 2 , i 2 , ? , a n , i n det(A) \sum_{i_1,i_2,\cdots,i_n } (-1)^{\sigma(i_1,\cdots,i_n)} a_{1,i_1}a_{2,i_2},\cdots, a_{n,i_n} det(A)i1?,i2?,?,in?∑?(?1)σ(i1?,?,in?)a1…

關于php語言api接口開發的流程

確定接口需求&#xff1a;首先明確接口的功能和需求&#xff0c;包括輸入參數、輸出結果以及接口的業務邏輯。 設計接口路由&#xff1a;根據接口需求&#xff0c;設計具體的接口路由&#xff0c;即URL路徑&#xff0c;用于訪問接口。 搭建PHP環境&#xff1a;確保你的服務器上…

STM32 FreeRTOS內存管理簡介

在使用 FreeRTOS 創建任務、隊列、信號量等對象時&#xff0c;通常都有動態創建和靜態創建的方式。動態方式提供了更靈活的內存管理&#xff0c;而靜態方式則更注重內存的靜態分配和控制。 如果是1的&#xff0c;那么標準 C 庫 malloc() 和 free() 函數有時可用于此目的&#…

【Linux系統編程】—— 深度解析進程等待與終止:系統高效運行的關鍵

文章目錄 進程創建再次認識fork()函數fork()函數返回值 寫時拷貝fork常規?法以及調用失敗的原因 進程終?進程終止對應的三種情況進程常?退出?法_exit函數exit函數return退出 進程等待進程等待的必要性進程等待的?法 進程創建 再次認識fork()函數 fork函數初識&#xff1…

國產編輯器EverEdit -重復行

1 重復行 1.1 應用場景 在代碼或文本編輯過程中&#xff0c; 經常需要快速復制當前行&#xff0c;比如&#xff0c;給對象的多個屬性進行賦值。傳統的做法是&#xff1a;選中行-> 復制-> 插入新行-> 粘貼&#xff0c;該操作有4個步驟&#xff0c;非常繁瑣。 那有沒…

基于VSCode+CMake+debootstrap搭建Ubuntu交叉編譯開發環境

基于VSCodeCMakedebootstrap搭建Ubuntu交叉編譯開發環境 1 基于debootstrap搭建目標系統環境1.1 安裝必要軟件包1.2 創建sysroot目錄1.3 運行debootstrap1.4 掛載必要的虛擬文件系統1.5 進入目標系統1.6 使用目標系統&#xff08;以安裝zlog為例&#xff09;1.7 清理和退出 2 基…