MapReduce輸入輸出的處理流程及combiner

来源:https://www.cnblogs.com/jifengblog/archive/2018/07/07/9277367.html
-Advertisement-
Play Games

MapReduce 的輸入輸出 MapReduce 框架運轉在<key,value> 鍵值對上,也就是說,框架把作業的輸入看成是一組<key,value>鍵值對,同樣也產生一組<key,value>鍵值對作為作業的輸出,這兩組鍵值對可能是不同的。 一個 MapReduce 作業的輸入和輸出類型如下圖 ...


MapReduce 的輸入輸出

MapReduce 框架運轉在<key,value> 鍵值對上,也就是說,框架把作業的輸入看成是一組<key,value>鍵值對,同樣也產生一組<key,value>鍵值對作為作業的輸出,這兩組鍵值對可能是不同的。

一個 MapReduce 作業的輸入和輸出類型如下圖所示:可以看出在整個標準的流程中,會有三組<key,value>鍵值對類型的存在。

 

 

 


 

 

MapReduce的處理流程

 

1.  Mapper任務執行過程詳解

  第一階段是把輸入目錄下文件按照一定的標準逐個進行邏輯切片,形成切片規劃。預設情況下,Split size = Block size。每一個切片由一個MapTask 處理。(getSplits)

 

  第二階段是對切片中的數據按照一定的規則解析成<key,value>對。預設規則是把每一行文本內容解析成鍵值對key 是每一行的起始位置(單位是位元組),value 是本行的文本內容。(TextInputFormat)

 

  第三階段是調用 Mapper 類中的 map 方法。上階段中每解析出來的一個<k,v>,調用一次 map 方法。每次調用 map 方法會輸出零個或多個鍵值對。

 

  第四階段是按照一定的規則對第三階段輸出的鍵值對進行分區。預設是只有一個區。分區的數量就是 Reducer 任務運行的數量。預設只有一個Reducer 任務。

 

  第五階段是對每個分區中的鍵值對進行排序。首先,按照鍵進行字典序排序,對於鍵相同的鍵值對,按照值進行排序。比如三個鍵值對<2,2>、<1,3>、<2,1>,鍵和值分別是整數。那麼排序後的結果是<1,3>、<2,1>、<2,2>。

 

  如果有第六階段,那麼進入第六階段;如果沒有,直接輸出到文件中。

  第六階段是對數據進行局部聚合處理,也就是 combiner 處理。鍵相等的鍵值對會調用一次 reduce 方法。經過這一階段,數據量會減少。 本階段預設是沒有的

 

2.  Reducer 任務 任務 執行過程詳解

  第一階段是 Reducer 任務會主動從 Mapper 任務複製其輸出的鍵值對。Mapper 任務可能會有很多,因此 Reducer 會複製多個 Mapper 的輸出。

 

  第二階段是把複製到 Reducer 本地數據,全部進行合併,即把分散的數據合併成一個大的數據。再對合併後的數據排序。

 

  第三階段是對排序後的鍵值對調用 reduce 方法。鍵相等的鍵值對調用一次reduce 方法,每次調用會產生零個或者多個鍵值對。最後把這些輸出的鍵值對寫入到 HDFS 文件中。

 

  在整個MapReduce 程式的開發過程中,我們最大的工作量是覆蓋map 函數和覆蓋reduce 函數。

 

 


 

Mapreduce的combiner

 

  每一個 map 都可能會產生大量的本地輸出,Combiner 的作用就是對 map 端的輸出先做一次合併,以減少在 map 和 reduce 節點之間的數據傳輸量,以提高網路 IO 性能,是 MapReduce 的一種優化手段之一。

  • combiner 是 MR 程式中 Mapper 和 Reducer 之外的一種組件
  • combiner 組件的父類就是 Reducer
  • combiner 和 reducer 的區別在於運行的位置:
    •   Combiner 是在每一個 maptask 所在的節點運行
    •   Reducer 是接收全局所有 Mapper 的輸出結果;
  • combiner 的意義就是對每一個 maptask 的輸出進行局部彙總,以減小網路傳輸量
  • 具體實現步驟:
  •      1、自定義一個 combiner 繼承 Reducer,重寫 reduce 方法
      2、在 job 中設置: job.setCombinerClass(CustomCombiner.class)
  • combiner 能夠應用的前提是不能影響最終的業務邏輯,而且,combiner 的輸出 kv 應該跟 reducer 的輸入 kv 類型要對應起來

 

  如果業務中 涉及中位數等跟數據順序 個數相關的 不要使用

  combiner本質上就是reduce 只不過是局部的reduce 進行局部彙總

 


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

-Advertisement-
Play Games
更多相關文章
  • DDL(數據定義語言)操作 Hive配置單元包含一個名為 default 預設的資料庫. create database [if not exists] <database name>; 創建資料庫 show databases | schemas; --顯示所有資料庫 drop database ...
  • 簡介 Hive 是基於 Hadoop 的一個數據倉庫工具,可以將結構化的數據文件 映射為一張資料庫表,並提供類 SQL 查詢功能。 本質是將 SQL 轉換為 MapReduce 程式。 Hive組件 用戶介面:包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command linein ...
  • 廣義上來說,Hadoop大數據平臺也可以看做是新一代的數據倉庫系統, 它也具有很多現代數據倉庫的特征,也被企業所廣泛使用。因為MPP架構的可擴展性,基於MPP的數據倉庫系統有時候也被劃分到大數據平臺類產品。 但是數據倉庫和Hadoop平臺還是有很多顯著的不同。針對不同的使用場景其發揮的作用和給用戶帶 ...
  • 問題是服務裡面mysql沒有啟動或者mysql服務丟失 解決辦法: 開始->運行->cmd,進到mysql安裝的bin目錄(以我的為例,我的安裝在D盤)D:\MySQL\bin>mysqld.exe -installService successfully installed. 這個時候刷新服務列表 ...
  • 採集目錄到HDFS 使用flume採集目錄需要啟動hdfs集群 spooldir source 監控指定目錄 如果目錄下有新文件產生 就採集走 註意!!! 此組件監控的目錄不能有同名的文件產生 一旦有重名文件:報錯 罷工 註意!!! 此組件監控的目錄不能有同名的文件產生 一旦有重名文件:報錯 罷工 ...
  • 概述 Flume 是 Cloudera 提供的一個高可用的,高可靠的,分散式的海量日誌採集、聚合和傳輸的軟體。 Flume 的核心是把數據從數據源(source)收集過來,再將收集到的數據送到指定的目的地(sink)。為了保證輸送的過程一定成功,在送到目的地(sink)之前,會先緩存數據(chann ...
  • 概述 序列化(Serialization)是指把結構化對象轉化為位元組流。 反序列化(Deserialization)是序列化的逆過程。把位元組流轉為結構化對象。 當要在進程間傳遞對象或持久化對象的時候,就需要序列化對象成位元組流,反之當要將接收到或從磁碟讀取的位元組流轉換為對象,就要進行反序列化。 Jav ...
  • 篇幅簡介 篇幅簡介 一、Msql數據類型 1、整型 tinyint, 占 1位元組 ,有符號: -128~127,無符號位 :0~255 smallint, 占 2位元組 ,有符號: -32768~32767無符號位 :0~65535 mediumint 占 3位元組 ,有符號: -8388608~838 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...