MapReduce處理流程

来源:http://www.cnblogs.com/priorityqueue/archive/2017/04/16/6719244.html
-Advertisement-
Play Games

MapReduce是Hadoop2.x的一個計算框架,利用分治的思想,將一個計算量很大的作業分給很多個任務,每個任務完成其中的一小部分,然後再將結果合併到一起。將任務分開處理的過程為map階段,將每個小任務的結果合併到一起的過程為reduce階段。下麵先從巨集觀上介紹一下客戶端提交一個作業時,Hado ...


  MapReduce是Hadoop2.x的一個計算框架,利用分治的思想,將一個計算量很大的作業分給很多個任務,每個任務完成其中的一小部分,然後再將結果合併到一起。將任務分開處理的過程為map階段,將每個小任務的結果合併到一起的過程為reduce階段。下麵先從巨集觀上介紹一下客戶端提交一個作業時,Hadoop2.x各個組件之間的聯繫及處理流程。然後我們再具體看看MapReduce計算框架在執行一個作業時,做了些什麼。

YARN

    YARN是Hadoop2.x框架下的資源管理系統,其組成部分為:

    1)全局資源管理器(global resource manager):整個系統的資源管理和調配。

    2)節點管理器(node manager)(每個節點都有一個)負責任務的啟動、配置及其資源的監控

    3)針對每個應用程式的應用程式管理器(application-specific application master)(因為Hadoop2.x支持的計算框架有很多,不只是MapReduce,還有像storm、spark、Tez不同處理機制的計算框架,所以MapReduce是一種應用程式,每個MapReduce作業是MapReduce類型程式的一個實例)

    4)調度器(scheduler)(在資源管理器里)

    5)容器(container):一部分CPU和記憶體組成一個容器,最為資源使用,一個應用程式運行在一組容器中。

    在瞭解了各個組件的功能之後,藉助下圖,我們看一下提交一個作業的流程:

   

       1)客戶端向資源管理器提交作業程式,作業程式的類型決定了使用哪種應用程式管理器(MapReduce、storm、Tez...)

       2)資源管理器協調資源,在一個節點上獲取一個運行應用程式管理器實例的容器

       3)應用程式管理器(application master)在資源管理器中註冊

       4)應用程式管理器通過資源請求與資源管理器協商資源,包括該容器所在的節點和該容器的詳細說明(CPU核數量和記憶體大小)

       5)和 6)應用程式管理器在一個節點上或者多個節點上運行其Map Task和Reduce Task

       7)在容器中運行的應用程式嚮應用程式管理器彙報執行度

       8)應用程式執行完畢,應用程式管理器就會從資源管理器中取消註冊,作業占用的資源會釋放到系統中

MapReduce計算框架

    MapReduce總的可以分為map階段、shuffle階段和reduce階段。

    map階段

    1)從HDFS中將輸入值傳輸到Mapper節點

        除了傳輸之外,在讀取過程中,還需要做一個轉換過程,將數據轉換為鍵值對的形式(MapReduce處理的輸入必須為鍵值對的形式),這個過程通過InputFormat完成(預設為TextInputFormat

    2)Mapper

        根據自己寫的Mapper函數對文件進行處理,同樣輸出的是鍵值對(如wordcount中統計收到的數據中每個詞出現的次數)

    3)Partitioner

        Patitioner根據Reducer的數量和自定義的劃分方法(沒有自定義的話,Hadoop有預設實現)去劃分Mapper的輸出;劃分的結果會按照Mapper輸出的鍵進行排序。

    4)Combiner(這一步是可選的)

        經過Partitioner排序後,如果作業中配置了Combiner,就會調用Combiner,Combiner就好像在Mapper端提前進行一下Reducer一樣。

        那為什麼要提前進行呢?這是為了儘量減少對網路帶寬的需求,比如經典的wordcount程式,在Mapper端處理之後,我們可能得到一個像key = apple,value = {1,1,1,1,1,1}的結果,如果我們能先對其進行一下Combiner,那麼就能得到key = apple,value = 6的結果,傳輸這樣的數據,肯定是要比key = apple,value = {1,1,1,1,1,1}的數據節省帶寬的。

        那既然能夠節省傳輸帶寬,為什麼又是可選的呢?何不每次都預設執行Combiner?這是因為並不是每一個Mapper都能進行Combiner;比如現在我們的任務要統計一段時間內的每天的最高氣溫,假設開始有兩個Mapper,輸出為(0,10,20)和(15,25),那麼提前進行Combiner可以使得傳遞給Reducer端的數據為(20, 25)這樣最後的結果還是為25,且傳輸的數據量變小;但是假如我們要求一段時間內的平均溫度呢?如果開始就在Mapper端進行Combiner求平均溫度,那麼Reducer端得到的數據為(10, 20),算出的平均溫度為15,但是實際上的平均溫度為(0, 10, 20 , 15 ,25)的平均,為14;所以需要搞清楚Combiner合適不合適提前進行。

    shuffle階段

    shuffle階段要做的事就是保證Mapper輸出的數據傳輸到合適的Reducer進行處理,如下圖所示:

 

    shuffle階段,每個Reducer都會使用HTTP協議從Mapper節點獲得自己的劃分(Reducer通過Application Master來獲取自己應該查詢哪些Mapper節點來獲取自己劃分的信息,因為每個Mapper實例完成後,會通知Application Master運行階段產生的劃分)

    reduce階段

    1)Reducer

           根據自己寫的reduce程式對數據進行處理(如wordcount中將每個單詞出現的次數加起來得到總和)

    2)將處理結果輸出到HDFS

           通過OutputFormat完成(預設是TextOutputFormat

總結

    通過對Hadoop2.x框架的處理流程和MapReduce計算框架的處理流程的梳理,可以在進行程式編寫時有一個更清楚的認識,下一步應該具體做些什麼。

    參考:《Hadoop權威指南》

    《Hadoop技術內幕》


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

-Advertisement-
Play Games
更多相關文章
  • 1.下載下邊的三個jar包,對dex2jar和jd-gui進行解壓 2.將需要反編譯的apk尾碼名改為.rar,然後進行解壓 3.將解壓後生成的classes.dex加入第一步解壓後的dex2jar的文件夾內 4.windows+R > cmd 5.執行上邊之後,會自動生成; 6.打開解壓的,選中第 ...
  • 本文摘自文章: [20+ Awesome Open-Source Android Apps To Boost Your Development Skills](https://blog.aritraroy.in/20-awesome-open-source-android-apps-to-boost... ...
  • IOS-- UIView中的坐標轉換 // 將像素point由point所在視圖轉換到目標視圖view中,返回在目標視圖view中的像素值 - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view; // 將像素point從view中轉 ...
  • CUBE:CUBE 生成的結果集顯示了所選列中值的所有組合的聚合。 ROLLUP:ROLLUP 生成的結果集顯示了所選列中值的某一層次結構的聚合。 GROUPING:當行由 CUBE 或 ROLLUP 運算符添加時,該函數將導致附加列的輸出值為 1;當行不由 CUBE 或 ROLLUP 運算符添加時 ...
  • 說到視窗框架就不得不提起開窗函數。 開窗函數支持分區、排序和框架三種元素,其語法格式如下: 視窗分區: 就是將視窗指定列具有相同值的那些行進行分區,分區與分組比較類似,但是分組指定後對於整個SELECT語句只能按照這個分組,不過 分區可以在一條語句中指定不同的分區。 1 <PARTITION BY ...
  • 先說點題外話,因為後面我會用到這個函數。 前兩天自定義了一個 sql 的字元串分割函數(Split),不過後來發現有點問題,例如: 我之前只處理了截取的最後一個為空的字元串,所以會出現以上的結果,現在我做了一些修改。代碼如下: 紅色部分的代碼為添加或修改的部分,下麵再看一下效果。 之前自定義 Spl ...
  • 導讀: 隨著大數據概念的火熱,啤酒與尿布的故事廣為人知。我們如何發現買啤酒的人往往也會買尿布這一規律?數據挖掘中的用於挖掘頻繁項集和關聯規則的Apriori演算法可以告訴我們。本文首先對Apriori演算法進行簡介,而後進一步介紹相關的基本概念,之後詳細的介紹Apriori演算法的具體策略和步驟,最後給出 ...
  • 最近在資料庫優化的時候,看到一些表在設計上使用了text或者blob的欄位,單表的存儲空間已經達到了近100G,這種情況再去改變和優化就非常難了 一、簡介 為了清楚大欄位對性能的影響,我們必須要知道innodb存儲引擎的處理方式: 1、一些知識點 1.1 在InnoDB 1.0.x版本之前,Inno ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...