Hadoop系列-MapReduce基礎

来源:https://www.cnblogs.com/zeem0ny/archive/2019/03/30/10628858.html
-Advertisement-
Play Games

由於在學習過程中對MapReduce有很大的困惑,所以這篇文章主要是針對MR的運行機制進行理解記錄,主要結合網上幾篇博客以及視頻的講解內容進行一個知識的梳理。 MapReduce on Yarn運行原理 Job提交 yarn由兩個重要的jvm進程組成:ResourceManager、NodeMana ...


由於在學習過程中對MapReduce有很大的困惑,所以這篇文章主要是針對MR的運行機制進行理解記錄,主要結合網上幾篇博客以及視頻的講解內容進行一個知識的梳理。

  1. MapReduce on Yarn運行原理

    • Job提交

      • yarn由兩個重要的jvm進程組成:ResourceManager、NodeManager。在客戶端運行MapReduce Job之後,會首先向ResourceManager申請一個唯一的applicationID

      • 判斷Job的輸出路徑是否存在,如果存在則報錯退出。這裡之所以這樣設計必須要求要一個新的輸出路徑的原因可以參考博文:https://www.cnblogs.com/sharpxiajun/p/3151395.html

      • 根據輸入文件計算input splits

      • 將Job需要的依賴資源上傳到HDFS,資源包括程式的jar包、計算好的splits(包括input splits數量、位置)等

      • 向ResourceManager提交MapReduce Job

    • Job初始化

      • ResourceManager根據提交的資源請求在NodeManager上啟動一個Container(yarn對資源的一個封裝,就是包含一定cpu和記憶體的jvm)運行ApplicationMaster(MRAppMaster)。在這裡需要說明兩點,第一,可以在程式內部添加代碼實現記憶體和cpu的配置(相對於在mapred-site.xml中配置較為靈活),ResourceManager根據資源情況選擇合適的NodeManager啟動一個Container來運行MRAppMaster。第二,之所以要在NodeManager上運行MRAppmaster是為了分散ResourceManager所在主機的運行壓力。

      • MRAppmaste初始化job(多少MapTask、ReduceTask、都在哪些機器上跑)

      • 讀取inputsplits信息,為每個inputsplits創建MmapTask,根據程式里的配置確定需要創建多少個ReduceTask,MRAppmaste就是負責管理Task運行的

    • Task分配

      • MRAppmaste為每一個MapTask、ReduceTask向ResourceManager申請資源

    • Task執行

      • 在申請完資源之後在數據所在的節點啟動一個Container,在其中運行一個YarnChild

      • MapTask、ReduceTask都是運行在YarnChild上的,運行過程中會給MRAppmaste發送運行狀態信息

    以上基本描述了MapReduce on Yarn的一個基本運行過程,可以參考以下的圖示進行理解。

     

 

  1. MapReduce 的運行機制

    巨集觀角度來看,整個MapReduce 程式運行的核心是MapTask和ReduceTask,分階段來看主要分為三個階段:map階段、shuffle階段、reduce階段,這其中shuffle是核心。

    • map階段:實際上是運行編寫好的map方法就可以,一般會在相應的splits節點機器上本地運行。

    • shuffle階段:shuffle階段的操作橫跨MapTask和ReduceTask

      • 在經過map方法之後數據會以key-value的形式保存在記憶體中,如果在程式中設置了要用多個ReduceTask的話,接下來MapReduce提供Partitioner介面進行分區,也就是決定哪些數據會最終在哪一個ReduceTask上跑。預設情況下是HashPartitioner,也可以自定義。之後,需要將數據寫入記憶體緩衝區中,緩衝區的作用是批量收集map結果。我們的key-value對以及Partition的結果都會被寫入緩衝區。當然寫入之前,key與value值都會被序列化成位元組數組。緩衝區是一個環形數據結構中,使用環形數據結構是為了更有效地使用記憶體空間,在記憶體中放置儘可能多的數據。

      • 這個緩衝區的預設大小是100MB,那麼當數據量較大的時候,緩衝區就不夠用了,這個時候就需要向磁碟中寫入,但是這裡不是說完全達到100MB才會觸發向磁碟寫的操作,預設情況下會有一個0.8的閾值繫數,也就是說當占用了80MB的空間之後,就會觸發向磁碟寫的操作,稱為spill。當溢寫線程觸發之後,需要對這80MB空間內的key做排序(Sort),在spill的過程中還可以利用剩餘的20MB空間繼續向緩存區存入數據,這兩個過程之間互不影響。如果client設置過Combiner,那麼現在就是使用Combiner的時候了,將有相同key的key/value對的value加起來,減少溢寫到磁碟的數據量,但是combiner要慎用,使用它的原則是combiner的輸入不會影響到reduce計算的最終輸入,例如:如果計算只是求總數,最大值,最小值可以使用combiner,但是做平均值計算使用combiner的話,最終的reduce計算結果就會出錯。每次spill操作也就是寫入磁碟操作時候就會寫一個溢出文件,也就是說在做map輸出有幾次spill就會產生多少個溢出文件。

      • 由於最終的輸出文件只有一個,所以需要將這些溢寫文件歸併到一起,這個過程就叫做Merge。這裡可能也會出現多個相同key的情況,設置過combiner的話這裡也會進行合併。

        以上就是MapTask階段的shuffle操作。

      • 拉取MapTask的輸出文件,主要通過HTTP的方式請求數據

      • merge和sort,數據拉取過來之後會先放在記憶體緩衝區中,與map端的spill類似也會向磁碟寫如溢出文件,同時進行排序,最後在硬碟中合併為一個最終文件

    • reduce階段:生成的最終文件作為reduce的輸入,然後調用編寫的reduce方法最終完成ReduceTask階段。

       

     

     

    通過上述分析可以發現,在整個環節中shuffle的操作最為複雜真正涉及到記憶體以及磁碟的讀寫,所以shuffle階段是一個主要系統調優的點。

    參考:

    【1】https://www.cnblogs.com/sharpxiajun/p/3151395.html

    【2】https://blog.csdn.net/sunshingheavy/article/details/75849554

    【3】https://langyu.iteye.com/blog/992916

    【4】https://www.cnblogs.com/yangsy0915/p/5528774.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用的Linux發行版本為Redhat 1. "Linux(RedHat)基礎學習—命令行使用入門" 2. "Linux(RedHat)基礎學習—文件定址與管理" 3. "Linux(RadHat)基礎學習—vim編輯器及文件的輸入輸出" 4. "Linux(RadHat)基礎學習—用戶管理" 5. ...
  • 學習目標: 1、瞭解u-boot-1.1.6中命令的實現機制 2、掌握如何在u-boot-1.1.6中添加自定義命令 1、命令的實現機制 uboot運行在命令行解析模式時,在串口終端輸入uboot命令,按下回車後,系統將執行命令的相應操作。以help命令為例,當輸入help命令,並按下回車時,串口終 ...
  • 最近公司的小程式因為高峰期訪問緩慢的問題,打算用負載均衡試試。本人是個新手,在網上找了幾篇負載均衡的文章看了看,最後還是用了寶塔面板的負載均衡插件...這個伺服器我也是剛剛接手,很多東西都是以前的同事做的,所以做些東西總是磕磕碰碰的。 問題1:創建負載均衡時不能用已經綁定的網站,必須新添加一個,但是 ...
  • 學習目標: 1、分析u-boot-1.1.6環境變數,瞭解環境變數初始化、設置以及過程 2、為後面能夠掌握u-boot-1.1.6如何啟動內核過程打下基礎 1、環境變數的概念 在分析uboot環境變數的源碼實現之前,先介紹一下環境變數的概念。u-boot通過環境變數為用戶提供一定程度的可配置性,在不 ...
  • 使用存儲過程實現分頁查詢,SQL語句如下: sql USE [DatebaseName] 資料庫名 GO / Object: StoredProcedure [dbo].[Pagination] Script Date: 03/30/2019 10:36:52 / SET ANSI_NULLS ON ...
  • 具體現象 記憶體CPU比例失調 一個Spark任務消耗 120(executor)*4G = 480G記憶體僅僅使用120個 core.幾個SprakSQL任務就將整個系統資源吃光. 設置超過40個executor,但未指定分區數,導致多數executor空閑. 原因分析 SparkSQL配置時Core ...
  • mysql_config_editor 幫助信息請查看 man mysql_config_editor 或 mysql_config_editor -? 或 mysql_config_editor set -? 該工具會在用戶家目錄生成二進位文件:.mylogin.cnf 該文件格式由選項組組成,每 ...
  • 親愛的讀者,您可能想知道為什麼要寫關於MongoDb和MySql這篇文章。那是因為我與NodeJs開發人員討論在應用程式中使用哪種數據存儲作為主要的數據存儲方式。 我看過很多評論都在爭論這個問題。 有人說:“使用MongoDb,它更快並且更適合NodeJs應用”,其他人說:“使用關係資料庫, 在Mo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...